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

এই উভয় ধারণাই আপনাকে লেন্সের একটি নির্দিষ্ট সেটের মাধ্যমে আপনার কোড বেসের প্রতিটি ক্লাস দেখতে সহায়তা করে। এই লেন্সগুলি আপনাকে আপনার ক্লাস ডিজাইন কতটা শক্ত এবং আপনি কোথায় কিছু পরিবর্তন করতে পারেন তা খুঁজে বের করতে সহায়তা করে৷
সেরা ফলাফলের জন্য আপনি উচ্চ সমন্বয় লক্ষ্য করতে চান &কম কাপলিং .
সংহতির উদাহরণ
কম সংহতি হল আপনার পিৎজাতে অস্বাভাবিক টপিং করার মতো, যখন উচ্চ সংহতি মনে হয় যেন সবকিছুই যেখানে থাকা উচিত।
আপনি এটির জন্য অনুভূতি পেতে পারেন, তবে এটি পরিমাপ করা কঠিন, আপনি কেবল একটি নম্বর পেতে পারবেন না যা আপনাকে বলে যে আপনার ক্লাস কতটা সংহত। তাই এটাকে বোঝা সহজ করতে আমি আপনাকে একটি কোড উদাহরণ দেখাতে চাই যেখানে এটি সত্যিই সুস্পষ্ট।
এখানে আপনি যান:
class Library def lend_book end def return_book end def make_coffee end end
এই উদাহরণে make_coffee এই লাইব্রেরীতে একটি ক্যাফেটেরিয়া থাকলেও এটি Library এর জন্য কোন অর্থ রাখে না কফি বানানোর ক্লাস 🙂
ক্যাফেটেরিয়াতে যে বইগুলি আছে, কীভাবে একটি বই ধার দেওয়া যায় ইত্যাদি সম্পর্কে কোনও তথ্যের প্রয়োজন নেই৷
আর লাইব্রেরির জানার দরকার নেই কতটা কফি বাকি আছে বা কিভাবে বানাবেন।
কম সংহতি বলতে আমরা এটাই বুঝি।
অবশ্যই :
এটা সবসময় স্পষ্ট নয়, মাঝে মাঝে আপনাকে মনযোগ দিতে হবে এবং পদ্ধতির নামের বাইরে দেখুন।
- এই পদ্ধতিগুলো আসলে কী করছে?
- তারা কোন ডেটা নিয়ে কাজ করছে?
- কোন বস্তুর সাথে তারা সহযোগিতা করছে?
এই প্রশ্নগুলি আপনাকে আপনার ক্লাসের সমন্বয়ের স্তর সম্পর্কে ধারণা দেবে।
আপনি কীভাবে কম সংহতি ঠিক করবেন?
আপনাকে সেই পদ্ধতিগুলি বের করতে হবে যেগুলি এই ক্লাসের অন্তর্গত নয় অন্য ক্লাসে, প্রায়শই একটি নতুন৷
কাপলিং এর একটি উদাহরণ
এখন চলুন কাপলিং এর দিকে নজর দেওয়া যাক।
এখানে উদাহরণ দেওয়া হল :
class ShoppingCart
attr_accessor :items
def initialize
@items = []
end
end
class Order
def process_order(cart)
cart.items.map(&:price).inject(:+)
end
end
এই উদাহরণে Order ShoppingCart এর সাথে অত্যন্ত সংযুক্ত কারণ এটি এটি সম্পর্কে অনেক বেশি জানে, এটি জানে একটি items আছে৷ পরিবর্তনশীল এবং এটি এর সাথে কিছু গণনা করছে।
এখন যদি আপনি ShoppingCart পরিবর্তন করেন items এর বাস্তবায়ন , আপনাকে Orderও পরিবর্তন করতে হবে .
ভালো না!
আমরা এটিকে এভাবে ঠিক করতে পারি :
class ShoppingCart
attr_accessor :items
def initialize
@items = []
end
def calculate_total
items.map(&:price).inject(:+)
end
end
class Order
def process_order(cart)
cart.calculate_total
end
end
আমরা কাপলিং কমিয়েছি গণনার বিবরণ স্থানান্তর করে যেখানে তারা অন্তর্গত।
আপনার যদি এটির জন্য একটি রূপক প্রয়োজন হয় তবে এই সেল ফোনগুলি সম্পর্কে চিন্তা করুন যা একটি স্থির ব্যাটারি সহ আসে, এটি হল হাই কাপলিং .
আপনি যদি ব্যাটারি প্রতিস্থাপন করতে পারেন তাহলে সেটা হল কম কাপলিং .
লক্ষ্য করুন যে আপনার এখনও কিছু স্তরের কাপলিং প্রয়োজন, ফোনটি ব্যাটারি এবং Order ছাড়া কাজ করবে না গ্রাহকের কাছ থেকে কত টাকা নিতে হবে তা না জেনে ক্লাস চলবে না।
সারাংশ
আপনি দুটি অত্যন্ত গুরুত্বপূর্ণ OOP নীতি সম্পর্কে শিখেছেন, সমন্বয় এবং সংযোগ। এই দুটি ধারণা আপনাকে ক্লাসের পদ্ধতিগুলি একসাথে কতটা ভাল কাজ করে এবং বাকি সিস্টেম থেকে আপনার ক্লাস কতটা স্বাধীন তা খুঁজে বের করতে সাহায্য করে।
আপনি এখনই আপনার একটি প্রকল্পে এটি প্রয়োগ করতে পারেন, এটি খুলুন এবং আপনার কয়েকটি ক্লাস দেখুন . আপনি যা শিখেছেন তা ব্যবহার করে আপনি কীভাবে তাদের উন্নতি করতে পারেন?
পড়ার জন্য ধন্যবাদ! শেয়ার করতে ভুলবেন না এবং নিউজলেটার সাবস্ক্রাইব করুন যদি আপনি এখনও না করে থাকেন 🙂