Header Ads

এবসট্রাকশন(Abstraction)

টেকনিক্যালি, এবসট্রাক্ট ক্লাসে কমপক্ষে একটি পিউর ভার্চুয়াল ফাংশন থাকতে হবে তাহলে সেটি হবে এবসট্রাক্ট ক্লাস। কিন্তু এবসট্রাকশন কেনো?

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

এখন আমরা ডেভেলপার দের সুবিধা নিয়ে আলোচনা করব। যদি প্রবলেম সলভিং করে থাকেন তাহলে ত C++ এর STL লাইব্রেরির sort() ফাংশনের কথা জানেন। এটাও কিন্তু একই রকম, আমরা শুধু অ্যারে সর্ট করার জন্য ফাংশনে অ্যারে টা পাস করছি কিন্তু ফাংশনের ভিতরে কীভাবে সর্ট হচ্ছে তা আমাদের না জানলেও চলছে। এখানে আমাদের শুধু sort() ফাংশন টা দিয়ে এর ভিতরের কোড আমাদের থেকে হাইড করে ফেলছে। এতে কিছু লাভ হচ্ছে আমাদের, প্রথমত ফাংশন টি আমাদের বারবার কোডে লিখতে হচ্ছে না। শুধু ফাংশন টা ব্যবহার করার জন্য আমাদের সময় কম লাগতেছে এবং এই ফাংশনের পিছনে চিন্তা না করে আমরা অন্য কিছু নিয়ে চিন্তা করতে পারছি। তাহলে বুঝা গেলো এবসট্রাকশন আসলে আমাদের অনেক সুবিধা দিচ্ছে বিশেষ করে বড় বড় কাজ করতে।

এখন আমরা সর্টিংয়ের দুইটা এলগরিদম bubble sort এবং insertion sort ইমপ্লিমেন্ট করে এবসট্রাকশনের একটি উদাহরণ দেখব।


// abstract class

class Algorithm {

public:

  // pure virtual function

  virtual vector <int> Sort(vector <int> arr) = 0;

};


// base classes

class bubbleSort: public Algorithm {

public:

  vector <int> Sort(vector <int> arr) {

    int n = arr.size();

    // bubble sort algorithm

    for (int i = 0; i < n; i++) {

      for (int j = 0; j < n-i-1; j++) {

        if (arr[j] > arr[j+1]) {

          int temp = arr[j];

          arr[j] = arr[j+1];

          arr[j+1] = temp;

        }

      }

    }

    return arr;

  }

};


class insertionSort: public Algorithm {

public:

  vector <int> Sort(vector <int> arr) {

    int n = arr.size();

    // insertion sort algorithm

    for (int i = 1; i < n; i++) {

      int key = arr[i];

      int j = i - 1;


      while (j >= 0 && arr[j] > key) {

        arr[j+1] = arr[j];

        j -= 1;

      }


      arr[j + 1] = key;

    }

    return arr;

  }

};


int main()

{

  vector <int> arr = {5, 2, 9, 5, 4};


  Algorithm* obj = new bubbleSort();


  arr = obj->Sort(arr);


  // print the array after sorting

  for (int &el : arr) {

    cout << el << ' ';

  }cout << endl;


  return 0;

}

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

আশাকরছি বুঝতে পেরেছেন এবং এনক্যাসুলেশন, ইনহেরিটেন্স, পলিমরফিজম, এবং এবসট্রাকশন বুঝার পর আশাকরছি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং সম্পর্কেও পরিষ্কার ধারণা হয়ে গেছে এবং এর সুবিধা গুলো বুঝতে পেরেছেন। বেশি বেশি করে পড়ুন এবং প্র্যাক্টিস করতে থাকেন তাহলে আরো ক্লিয়ার হয়ে যাবে। Happy reading...

No comments

Powered by Blogger.