কম্পিউটার টিউটোরিয়াল

রুবি অন রেলে পলিমরফিজম মাস্টারিং:একটি ব্যবহারিক গাইড

আপনি যদি কখনও একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রাম (OOP) তৈরিতে সময় ব্যয় করে থাকেন, আপনি সম্ভবত আপনার অ্যাপ্লিকেশনে পলিমরফিজম ব্যবহার করেছেন বা, অন্তত, শব্দটি শুনেছেন৷

এটি এমন একটি শব্দ যা আপনি একটি বিজ্ঞান বা কম্পিউটার বিজ্ঞান পাঠ্যপুস্তকে দেখতে চান। আপনি হয়ত পলিমারফিজম নিয়ে গবেষণা করতে সময় ব্যয় করেছেন এবং ধারণাটি স্পষ্টভাবে না বুঝেই আপনার প্রয়োগে এটি প্রয়োগ করেছেন।

এই নিবন্ধটি আপনাকে পলিমারফিজম সম্পর্কে একটি বৃহত্তর বোঝার দেবে, বিশেষ করে রুবি অন রেলে। এটি সম্পন্ন করতে, আমরা এতে ডুব দেব:

  • বাস্তব জগতে পলিমারফিজমের ব্যবহার
  • ওওপির মাধ্যমে প্রোগ্রামিংয়ে পলিমরফিজম
  • উচ্চ মানের কোড বজায় রাখতে সাহায্য করার জন্য আপনি কীভাবে এটিকে আপনার রেল অ্যাপ্লিকেশনে অন্তর্ভুক্ত করতে পারেন

চলুন চলুন!

বাস্তব জগতে পলিমরফিজম

বিভিন্ন প্রসঙ্গে পলিমরফিজমকে সংজ্ঞায়িত করার বিভিন্ন উপায় রয়েছে। একটি দরকারী সংজ্ঞা, প্রসঙ্গ নির্বিশেষে, হল 'একটি বস্তুর একাধিক ফর্ম প্রদর্শন করার ক্ষমতা' . প্রকৃতপক্ষে, যদি আমরা শব্দটি নিজেই ভেঙে দেই, পলি মানে 'অনেক' এবং মরফ মানে 'রূপ'।

বাস্তব জগতে, এই সংজ্ঞার একটি মৌলিক উদাহরণ হতে পারে একজন মহিলা যিনি একজন পুলিশ অফিসার, বোন, কারো সন্তান, কারো মা, ইত্যাদি। প্রতিটি ভূমিকাই তার আচরণ নির্ধারণ করে এবং সে যে ব্যক্তি তার জন্য অবদান রাখে।

পলিমরফিজম এবং জেনেটিক্স

কম্পিউটার প্রোগ্রামিংয়ের বাইরে, পলিমরফিজম একটি শব্দ যা সাধারণত জীববিজ্ঞান এবং জেনেটিক্সের সাথে যুক্ত। এই প্রেক্ষাপটে, পলিমরফিজমকে আরও নির্দিষ্টভাবে জেনেটিক বৈচিত্র হিসাবে সংজ্ঞায়িত করা হয় যার ফলে একটি প্রজাতির মধ্যে বিভিন্ন স্বতন্ত্র রূপ বা ব্যক্তিদের ধরন দেখা দেয়।

জাগুয়ারের কথা ভাবুন। জাগুয়ারের একাধিক জিনের ভিন্নতা থাকতে পারে, যা তাদের পশমের রঙকে প্রভাবিত করতে পারে। বেশির ভাগ জাগুয়ারের কালো বৃত্তের সাথে তেঁতুলের রঙ থাকে। যাইহোক, পরিবর্তিত জিনের কারণে তাদের হালকা বা গাঢ় বৃত্ত থাকতে পারে এবং কিছুতে কালো পশমের রঙ হতে পারে।

একই প্রজাতির পাখির মধ্যে বিভিন্ন পিগমেন্টেশন পলিমারফিজমের আরেকটি উদাহরণ। গৌল্ডিয়ান ফিঞ্চের কথা বিবেচনা করুন, যার রঙের মধ্যে ব্যক্তি-বিশেষের মধ্যে সুস্পষ্ট পার্থক্য রয়েছে।

মনোমরফিজম বনাম পলিমরফিজম

আমরা যদি মনোমর্ফিজমের দিকে মনোযোগ দিই, তাহলে আমরা পলিমরফিজমকে আরও বুঝতে পারব। জীববিজ্ঞানের সাথে লেগে থাকা, মনোমরফিজমকে 'একটি প্রজাতি মাত্র একটি ফর্ম' হিসাবে সংজ্ঞায়িত করা যেতে পারে , যা এর বিকাশের বিভিন্ন পর্যায়ে একই ফর্ম বজায় রাখে।

পেঙ্গুইন মনোমরফিক। এমনকি বিশেষজ্ঞদের জন্যও লিঙ্গের মধ্যে পার্থক্য করা কঠিন। একটি পেঙ্গুইনে জিনের পার্থক্য ন্যূনতম। অতএব, পেঙ্গুইনের শারীরিক বৈশিষ্ট্যগুলি প্রায় আলাদা করা যায় না, বিশেষ করে তাদের আকার এবং কালো এবং সাদা রঙের ক্ষেত্রে।

আচরণগত সংকেতগুলি প্রায়শই মনোমরফিক প্রজাতির লিঙ্গের মধ্যে পার্থক্য করার সবচেয়ে সহজ উপায়।

আসুন প্রোগ্রামিং-এ পলিমরফিজমের দিকে আমাদের মনোযোগ দেওয়া যাক, বিশেষ করে।

OOP-তে পলিমরফিজম

যদি আমরা আমাদের পলিমারফিজমের প্রাথমিক সংজ্ঞা বিবেচনা করি - একটি বস্তুর একাধিক ফর্ম প্রদর্শনের ক্ষমতা — আমরা এটিকে নির্বিঘ্নে OOP এর সাথে সম্পর্কিত করতে পারি।

OOP-তে, আমরা একই পদ্ধতি ব্যবহার করে পৃথক বস্তুতে পাস করে বিভিন্ন ফলাফল তৈরি করতে পারি। আমরা এটি অর্জন করতে শর্তাবলী ব্যবহার করতে পারে. যাইহোক, এটি চঙ্কি কোড তৈরি করতে পারে এবং আমাদের DRY নীতিগুলি থেকে দূরে সরিয়ে দিতে পারে। পরিষ্কার এবং যৌক্তিক OOP অ্যাপ্লিকেশন তৈরিতে পলিমরফিজম অপরিহার্য।

রুবির মতো একটি OOP ভাষায় পলিমরফিজম কীভাবে প্রয়োগ করা যেতে পারে তার দুটি উদাহরণ দেখি:উত্তরাধিকার এবং হাঁস-টাইপিংয়ের মাধ্যমে৷

রুবিতে পলিমরফিজম এবং উত্তরাধিকার

উত্তরাধিকার হল যেখানে একটি শিশু শ্রেণী পিতামাতার শ্রেণীর বৈশিষ্ট্যের উত্তরাধিকারী হয়৷

আমরা কীভাবে উত্তরাধিকারের সাথে পলিমরফিজম প্রয়োগ করতে পারি তার একটি উদাহরণ নীচে দেওয়া হল:

 

উপরের কোডটিতে দুটি চাইল্ড ক্লাস রয়েছে — Stringed এবং Percussion — প্যারেন্ট ক্লাস Instrument থেকে উত্তরাধিকারসূত্রে প্রাপ্ত . এই উদাহরণটি বহুরূপী, কারণ আমরা একটি পদ্ধতিকে কল করছি:instrument_example — এবং এটি একাধিক ফর্ম আউটপুট করে:Saxophone , Guitar , এবং Drums .

উত্তরাধিকারের মাধ্যমে পলিমরফিজম অর্জনের এই উদাহরণটি মূলত একটি পদ্ধতিকে অগ্রাহ্য করে, কিন্তু একটি OOP ভাষায় পলিমরফিজমের একটি পরিষ্কার বোঝা প্রদান করতে সাহায্য করে।

রুবিতে হাঁস-টাইপিং এবং পলিমরফিজম

ওওপি-তে পলিমরফিজমের আরও বাস্তব উদাহরণ হল হাঁস-টাইপিং, যা নীচে উল্লেখ করা হয়েছে।

 

যদিও প্রতিটি ক্লাস পদ্ধতির নাম brand , আমরা পদ্ধতিটি ওভাররাইড করি না (পলিমরফিক উত্তরাধিকারের বিপরীতে)। একটি অভিভাবক শ্রেণীর থেকে উত্তরাধিকারী হওয়ার পরিবর্তে, এখানে আমাদের চারটি স্বাধীন শ্রেণী রয়েছে, যার প্রত্যেকটির নিজস্ব পদ্ধতি রয়েছে। হাঁস-টাইপিং দরকারী, কারণ আমরা প্রতিটি পদ্ধতির আউটপুট পেতে ক্লাসের মাধ্যমে পুনরাবৃত্তি করতে পারি (প্রতিটি পদ্ধতিকে আলাদাভাবে কল করার বিপরীতে)।

আবার, হাঁস-টাইপিং হল বহুরূপী কারণ আমরা একটি পদ্ধতি বলি — brand — এবং একটি আউটপুট তৈরি করুন যা একাধিক ফর্ম নেয়:Gibson , Pearl , Fender , এবং Casio . অবশ্যই, এই ফলাফল তৈরিতে হাঁস-টাইপিং এবং পলিমরফিজম অপরিহার্য নয়। যাইহোক, পরিষ্কার এবং যৌক্তিক কোড বাস্তবায়নের জন্য এটি খুবই উপযোগী।

রুবি অন রেলে পলিমরফিজম

পলিমরফিজম একটি সক্রিয় রেকর্ড অ্যাসোসিয়েশন হিসাবে রুবি অন রেলে ভাল কাজ করে। যদি মডেলগুলি মূলত একই কাজ করে, আমরা একটি বহুরূপী সম্পর্ক তৈরি করতে তাদের একটি একক মডেলে পরিণত করতে পারি৷

ইন্সট্রুমেন্ট থিমের সাথে লেগে থাকা, আসুন এমন একটি অ্যাপ্লিকেশন বিবেচনা করি যেখানে ব্যবহারকারীরা যন্ত্র পোস্ট, মন্তব্য এবং পর্যালোচনা করতে পারে। নীচের সত্তা-সম্পর্ক চিত্র (ERD) পরীক্ষা করুন:

রুবি অন রেলে পলিমরফিজম মাস্টারিং:একটি ব্যবহারিক গাইড

এই উদাহরণে, আমাদের কাছে একটি অ্যাপ্লিকেশনের জন্য একটি ERD আছে যেখানে একজন ব্যবহারকারী তার বিবরণ সহ একটি উপকরণ পোস্ট করতে পারেন। একজন ব্যবহারকারী সেই পোস্ট করা উপকরণ সম্পর্কে একটি মন্তব্যও দিতে পারেন৷

অন্যান্য ব্যবহারকারীরা তারপরে উপকরণের একটি রেটিং প্রদান করতে পারে এবং তাদের উপযোগিতা বা বৈধতা নির্ধারণ করতে মন্তব্যকে রেট দিতে পারে। এই অ্যাক্টিভ রেকর্ড অ্যাসোসিয়েশনগুলি ঠিকঠাক কাজ করে এবং আমাদের আবেদনের উদ্দেশ্য পূরণ করে৷

আমরা যদি আমাদের আবেদনে অন্যান্য সমিতি যোগ করতে চাই? আমাদের ডুপ্লিকেট অ্যাসোসিয়েশন যোগ করতে হবে এবং পুনরাবৃত্তি করতে হবে।

উদাহরণস্বরূপ, যদি আমরা একটি user_rating যোগ করতে চাই একটি ব্যবহারকারীর বিশ্বস্ততা রেট করার জন্য মডেল, আমাদের নিজস্ব সমিতিগুলির সাথে একটি পৃথক টেবিল তৈরি করতে হবে। এর অর্থ হল user-এর মধ্যে একটি নতুন সম্পর্ক যোগ করা এবং user_rating মডেল তখন ইআরডি দেখতে এরকম কিছু হবে:

রুবি অন রেলে পলিমরফিজম মাস্টারিং:একটি ব্যবহারিক গাইড

এখন আমাদের কাছে তিনটি মডেল রয়েছে যা মূলত একই কাজ করছে:একটি বস্তুকে রেটিং দেওয়া, কিন্তু ভিন্ন প্রসঙ্গে। এই অ্যাসোসিয়েশনগুলি পলিমরফিক অ্যাসোসিয়েশনের জন্য উপযুক্ত৷

পলিমরফিক হিসেবে রেটিং মডেলের সাথে ERD-কে দেখে নেওয়া যাক:

রুবি অন রেলে পলিমরফিজম মাস্টারিং:একটি ব্যবহারিক গাইড

যেমন আমাদের একটি rating আছে কলাম, আমি মডেলটির নাম দিয়েছি reviews ratings এর বিপরীতে বিভ্রান্তি এড়াতে। এখানে, অ-পর্যালোচনা মডেলগুলির এখনও অন্যান্য মডেলগুলির সাথে সম্পর্ক রয়েছে, তবে পৃথক রেটিং মডেলগুলিকে একক পর্যালোচনা মডেলে একত্রিত করা হয়েছে৷

reviewable_type এবং reviewable_id এখন পর্যালোচনাটি কোন মডেলের সাথে যুক্ত তা উপস্থাপন করে পৃথক রেটিং মডেলগুলির মতো একই ভূমিকা গ্রহণ করুন৷

reviewable_type কলাম মডেল ক্লাসের নাম সংরক্ষণ করে (user , instrument_post , অথবা comment ), এবং reviewable_id সেই মডেলের সংশ্লিষ্ট আইডি সংরক্ষণ করে।

আমরা এখন এই দুটি কলাম ব্যবহার করতে পারি একটি নির্দিষ্ট ব্যবহারকারীর সাথে রেটিং পূর্ণসংখ্যাকে লিঙ্ক করতে, পোস্ট করতে, বা সক্রিয় রেকর্ড ক্যোয়ারী এবং/অথবা শর্তসাপেক্ষ বিবৃতির মাধ্যমে মন্তব্য করতে। বিদেশী কী user_id পর্যালোচনা মডেলে রয়ে গেছে, কারণ এটি আমাদের ট্র্যাক করতে দেয় কোন ব্যবহারকারী একটি পর্যালোচনা করেছে৷

এই মুহুর্তে, আমাদের পলিমরফিক মডেলে '-able' শব্দটি অদ্ভুত মনে হতে পারে, কিন্তু এর উদ্দেশ্য শীঘ্রই পরিষ্কার হয়ে যাবে যখন আমরা কিছু Rails ম্যাজিক করব।

পর্যালোচনা মডেলটিকে বহুরূপী হিসাবে বিবেচনা করা হয় কারণ আমাদের কাছে একটি মডেল বা বস্তু রয়েছে যা প্রতিনিধিত্ব করতে পারে এবং একাধিক ফর্ম গ্রহণ করতে পারে:ব্যবহারকারী, মন্তব্য এবং উপকরণ পোস্ট পর্যালোচনা৷

রুবি অন রেলে পলিমরফিজম প্রয়োগ করা

একটি রেল অ্যাপ্লিকেশনে পলিমরফিজম বাস্তবায়নের সময়! যদি আমরা এমনভাবে কাজ করি যেন আমরা ইতিমধ্যেই আমাদের user তৈরি করেছি , instrument_post , এবং comment মডেল, আমরা আমাদের পলিমরফিক মডেল অন্তর্ভুক্ত করা শুরু করতে পারি:reviews .

প্রথমত, একটি টেবিল তৈরি করুন এবং টার্মিনাল থেকে মডেল তৈরি করুন, যেমন:

 

এটি মাইগ্রেশন ফাইল তৈরি করে:

 

schema.rb মাইগ্রেশন চালানোর পরে ফাইল আপডেট। পলিমরফিক বিকল্পটি reviewable কে রূপান্তরিত করে reviewable_type-এ কলাম এবং reviewable_id কলাম:

 
 

মনে আছে যখন আমরা উপরে '-able' শব্দটি উল্লেখ করেছি? এটি আমাদের পলিমরফিক অ্যাসোসিয়েশন মনোনীত করার জন্য একটি রেল নামকরণ কনভেনশন, আমাদের একটি ব্যবহারকারী, উপকরণ পোস্ট এবং মন্তব্য 'পর্যালোচনাযোগ্য' করার ক্ষমতা দেয়৷

এই Rails ম্যাজিক কাজ করার জন্য, আমাদের নিশ্চিত করতে হবে যে আমাদের অন্যান্য মডেলগুলি আমাদের পলিমরফিক মডেলের সাথে সঠিকভাবে যুক্ত আছে৷

 
 
 

user , instrument_post , এবং comment মডেলগুলি এখন পর্যালোচনা এবং রেটিং দেওয়া যেতে পারে৷

যদি আমরা ইতিমধ্যে কমপক্ষে দুইজন ব্যবহারকারী, একটি মন্তব্য এবং একটি উপকরণ পোস্ট তৈরি করে থাকি, তাহলে আমরা সক্রিয় রেকর্ড ক্যোয়ারীগুলির মাধ্যমে বিভিন্ন উপায়ে পর্যালোচনাগুলি তৈরি করতে এবং অ্যাক্সেস করতে পারি, যেমন:

 
 
 
 

reviews-এর সাথে ইন্টারঅ্যাক্ট করার আরও অনেক উপায় আছে মডেল, আপনাকে রেন্ডার করতে হবে তার উপর নির্ভর করে। অভিভাবক মডেলগুলি কীভাবে একটি পর্যালোচনা তৈরি করতে পারে তা ভাগ করা গুরুত্বপূর্ণ৷ যতক্ষণ পর্যালোচনাটি একজন ব্যবহারকারী এবং একটি পর্যালোচনাযোগ্য মডেলের সাথে যুক্ত থাকে, ততক্ষণ সক্রিয় রেকর্ড স্বয়ংক্রিয়ভাবে reviewable_id লিঙ্ক করে এবং reviewable_type সংশ্লিষ্ট মডেলের সাথে।

আমাদের রেল উদাহরণগুলিতে পলিমরফিজম ছাড়া, আরও অনেক টেবিল, অপ্রয়োজনীয় ডুপ্লিকেট কলাম, belongs_to থাকবে , এবং has_many আমাদের মডেলে সমিতি। পলিমরফিজম টেবিলে যোগদানের প্রয়োজনীয়তাকে কমিয়ে দিয়েছে, সহজ এবং দ্রুত সক্রিয় রেকর্ড প্রশ্ন এবং অ্যাসোসিয়েশনের অনুমতি দেয়।

র্যাপ আপ:পরিষ্কার এবং যৌক্তিক রুবি কোডের জন্য পলিমরফিজম ব্যবহার করুন

এই পোস্টে, আমরা দুটি স্বতন্ত্র পরিবেশে পলিমারফিজম অন্বেষণ করেছি:জীববিদ্যা এবং রুবি প্রোগ্রামিং। উভয় ক্ষেত্রেই, পলিমরফিজম হল একটি বস্তুর একাধিক রূপ প্রদর্শনের ক্ষমতা।

আমরা বিশেষভাবে রুবি অন রেলে পলিমরফিজমের ব্যবহারে ডুব দেওয়ার আগে উত্তরাধিকার এবং হাঁস-টাইপিংয়ের মাধ্যমে রুবিতে পলিমরফিজম কীভাবে প্রয়োগ করা যায় তা দেখেছি।

পলিমরফিজম আপনাকে পরিষ্কার এবং যৌক্তিক কোড লিখতে সাহায্য করতে পারে। আমার লক্ষ্য হল আপনার বর্তমান, ভবিষ্যৎ এবং এমনকি অতীতের অ্যাপ্লিকেশনগুলির জন্য আপনার টুলবেল্টে এই অপরিহার্য OOP ধারণাটি যোগ করতে সাহায্য করা।

শুভ কোডিং!

পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!


  1. পাইথনের সমস্ত শীর্ষবিন্দুর মধ্যে একটি গ্রাফের মধ্যে ন্যূনতম খরচের যোগফল খুঁজে বের করার প্রোগ্রাম

  2. রুবির সাথে বিগ-ও স্বরলিপি অন্বেষণ

  3. জাভাতে কমান্ড প্রম্পটের মাধ্যমে কীভাবে একটি JAR ফাইল চালাবেন?

  4. অ্যান্ড্রয়েডে ডেটপিকার ডায়ালগের রঙ কীভাবে পরিবর্তন করবেন?