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

C++ বা Java-এ অবজেক্ট স্লাইসিং (Object Slicing) কী?

অবজেক্ট স্লাইসিং হলো যখন ডেরাইভড ক্লাস অবজেক্টকে বেস ক্লাস টাইপের ভেরিয়েবলে অ্যাসাইন/পাস করা হয়, তখন ডেরাইভড ক্লাসের এক্সট্রা মেম্বার (ডেটা/মেথড) "স্লাইস" হয়ে যাওয়া (হারানো)।

উদাহরণ

class Foo {
    int a;
};

class Bar : public Foo {
    int b; // ডেরাইভড ক্লাসে এক্সট্রা মেম্বার
};

// স্লাইসিং ঘটবে:
Bar bar;
Foo foo = bar; // bar-এর 'b' মেম্বার কপি হয়না, শুধু Foo অংশ কপি হয়
// foo এখন শুধু Foo অংশ ধারণ করে, Bar-র b হারিয়ে গেছে

কেন সমস্যা?

  • পলিমরফিজম ভাঙে (ভার্চুয়াল ফাংশন কল করলে বেস ভার্সন কল হবে)
  • ডেটা লস হয়
  • সাবটাইল বাগ সৃষ্টি করে

প্রতিরোধ

  • বেস ক্লাস রেফারেন্স/পয়েন্টার ব্যবহার করুন: Foo& ref = bar; বা Foo* ptr = &bar;
  • বেস ক্লাসকে abstract করুন (পিউর ভার্চুয়াল ফাংশন দিয়ে) যাতে ইনস্ট্যান্সিয়েট করা যায় না।
  • C++-এ delete কপি কনস্ট্রাক্টর/অ্যাসাইনমেন্ট বেস ক্লাসে দিয়ে স্লাইসিং বাধা দিন।

Java-এ: সব অবজেক্ট রেফারেন্স দিয়ে ম্যানেজ হয়, তাই স্লাইসিং সমস্যা নেই (কিন্তু টাইপ কাস্টিং-এ সাবটাইল ইস্যু থাকতে পারে)।

  1. C++-এ থাকা কিন্তু জাভায় নেই এমন ফিচারগুলো

  2. জাভা ৯-এ Cleaner ক্লাসের ব্যবহার

  3. জাভাতে ARM (Automatic Resource Management) কী?

  4. জাভাতে অবজেক্ট ক্লোনিংয়ের ব্যবহার