programming, c++, learncpp, data, abstraction, data-abstraction, oop, object-oriented

অবজেক্ট অরিয়েন্টেড সি++ এবং Data Abstraction


টেলিভিশন অথবা TV.

আমরা এই বস্তুটাকে সবাই চিনি। সেই আদীম যুগের CRT থেকে LCD, LED এবং বর্তমানে 4k, Smart TV সব গুলোকে সবাই কম বেশী চিনি এবং অপারেট করতে জানি। অপারেট করাটা খুব সহজ। একটা রিমোট কন্ট্রোলার থাকে, বাটন গুলোতে লিখা থাকে কোনটা কী কাজ করবে এবং চাপ দিলে টিভিতে সেই কাজটা হচ্ছে। আবার টিভির নিচের অংশেও কিছু বাটন এবং পাসের অংশে কিছু পোর্ট থাকে। সবগুলো কি কি কাজ আমরা সবাই জানি অথবা টিভির ম্যানুয়াল বই পড়ে জেনে নেই। কিন্তু আমরা কি জানি এই টিভির ভিতরে কীভাবে কি কাজ হচ্ছে? কীভাবে এই টিভিটি স্যাটেলাইট থেকে সিগন্যাল রিসিভ করছে? এবং কীভাবেই বা সেটা ডিসপ্লেতে সম্প্রচার করছে? জানি না অনেকেই।

কারন, টিভি গুলো তাদের ভিতরের কাজের সাথে বাইরের ইন্টারফেসটাকে আলাদা করে রেখেছে। যেমন আমরা পাওয়ার বাটন অন/অফ করলে টিভি চালু অথবা বন্ধ হচ্ছে, এটা বাইরের ইন্টারফেসে থাকে, এটাকে বলে ফ্রন্টএন্ড (Front-end), কিন্তু এই বাটনে চাপ দিলে কীভাবে টিভিটি চালু/বন্ধ হয় তা আমরা দেখতেছি না। এটা ভিতরের প্রোগ্রাম। এটা কে বলে ব্যাকএন্ড (Back-end)।

এই পুরো সিস্টেমটাকে বলে DATA ABSTRACTION. 


Data Abstraction হচ্ছে সি++ এ অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর সবচেয়ে দরকারি এবং গুরুত্বপূর্ণ একটি ফিচার। Abstraction অর্থ হচ্ছে শুধুমাত্র দরকারি জিনিসপত্র দেখানো এবং বাকী সব কিছু লুকানো। Data Abstraction শুধুমাত্র দরকারি ডেটা গুলো বাইরের বিশ্বের কাছে প্রকাশ করে, এর ভিতরের ইমপ্লিমেন্টেশন অথবা ভিতরের ডেটা/ফাংশন এগুলো সব লুকিয়ে রাখে। এইভাবে ইন্টারফেস এবং ইমপ্লিমেন্টেশন কে আলাদা করে রাখে দেখে Data Abstraction হচ্ছে প্রোগ্রামিং এবং ডিজাইনের অন্যতম গুরুত্বপূর্ণ টেকনিক।

সি++ আবার একটু অন্য গ্রেট লেভেলের Data Abstraction প্রোভাইড করে। সি++ বাইরের বিশ্বে অবজেক্টকে ফাংশনালিটি এবং অবজেক্ট ডেটা ম্যানুপুলেট করার জন্য পর্যাপ্ত পরিমাণে পাবলিক ম্যাথোড দিয়ে থাকে, কিন্তু কিভাবে class গুলো implement হয়েছে সেই তথ্য দেয় না।


Classes ব্যবহার করে Abstraction — 

আমরা class এ Data Abstraction এর প্রয়োগ করতে পারি। Class এর কাজ হচ্ছে কিছু ডেটা মেম্বার এবং তাদের ফাংশন গুলো নিয়ে একটি Group তৈরি করা। তাই একটি Class সিদ্ধান্ত নিতে পারবে কখন কোন ডেটা মেম্বারকে বাইরের ওয়ার্ল্ডএ দেখাতে হবে এবং কোন ডেটা মেম্বারকে লুকাতে হবে।


Header Files এর মধ্য দিয়ে Abstraction — 

সি++ আরেক ধরনের Data Abstraction এর প্রয়োগ দেখা যায়। সেটা হচ্ছে Header Files এর সাহায্যে। যেমন- cout ম্যাথোড, যেটা দিয়ে আমরা কনসোলে কিছু প্রিন্ট করাই, এই ম্যাথোডটি হচ্ছে <iostream> অথবা input output stream header files এর সদস্য। যখনই আমাদের কোনো কিছু স্ক্রিনে প্রিন্ট করতে হয় আমরা শুধু cout ম্যাথোড টি কল করি <iostream> থেকে। কিন্তু সি++ এর Header Files আমাদেরকে জানায় না কীভাবে এই cout ম্যাথোড টি কাজ করছে অথবা এভাবে কাজ করার পিছনে কোন এলগোরিদমটি রয়েছে।


Access Specifiers ব্যবহার করে Abstraction — 

Access Specifiers হচ্ছে Data Abstraction এর প্রধান ভিত্তি। Access Specifiers ব্যবহার করে আমরা Class মেম্বারদের উপর রেস্ট্রিকশন বসাতে পারি। যেমন — 

  • Class এর Public Member গুলোকে প্রোগ্রামের যেকোনো জায়গা থেকে এক্সেস করা যাবে।
  • Private Member গুলোকে শুধুমাত্র সেই প্রোগ্রামের সেই Class থেকেই এক্সেস করা যাবে। Class এর বাইরে তাদের ব্যবহার সম্পূর্ণ নিষিদ্ধ।

আমরা উপরের দুইটি ফিচার ব্যবহার করে খুব সহজেই Data Abstraction এর প্রয়োগ করতে পারবো। যেমন — 

#include <iostream>

using namespace std;

class abstraction {
    private:
        int a, b;
        
    public:
        void set(int x, int y) {
            a = x;
            b = y;
        }
        
        void display() {
            cout << "a = " << a <<endl;
            cout << "b = " << b <<endl;
        }
};

int main() {
    abstraction obj;
    
    obj.set(1, 2);
    obj.display();
    
    return 0;
}

আউটপুট হবে — 

a = 1 
b = 2

উপরের প্রোগ্রামে আমরা ভ্যারিয়েবল a এবং b কে সরাসরি এক্সেস করতে পারবো না, কারন এরা Private Member। কিন্তু আমরা set() function এ a এবং b এর ভ্যালু বসিয়ে display() function কে কল করে a এবং b এর ভ্যালু ডিসপ্লে করতে পারবো। এটাই হচ্ছে Data Abstraction।


Data Abstraction এর সুবিধাগুলো — 

  • ব্যবহারকারীকে লো লেভেল অথবা নিম্ন মানের কোড লিখা থেকে বিরত রাখে
  • কোডের ডুপ্লিকেশন কমাতে সাহায্য করে এবং একই কোডকে বার বার ব্যবহার যোগ্য করে
  • ভিতরের কোডের প্রয়োগ খুব সহজেই পরিবর্তন করা যায়, কারন Class গুলো Data Abstraction এ স্বাধীনভাবে কাজ করে। ডিবাগ (Debug) করার সময় এই ফিচারটা অনেক প্রয়োজনীয়।
  • এপ্লিকেশন অথবা প্রোগ্রামের নিরাপত্তা বাড়িয়ে দেয়, কারন শুধুমাত্র গুরুত্বপূর্ণ ডেটা অথবা তথ্য গুলোই ব্যবহারকারীকে দেয়। 

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং নিয়ে আমার আগের লিখা গুলো পড়তে পারবেন আমার ব্যক্তিগত ব্লগ এবং মিডিয়াম থেকে —

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং সি++
আমাদের আশেপাশে কতই তো মানুষ দেখি, প্রতিটি মানুষই একজন আরেকজন থেকে আলাদা, আবার সবার কিছু একই রকম বৈশিষ্ট থাকে। থাক বাদ…bit.ly

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং সি++
মাত্র ৪ মিনিটে ব্যাসিক সি++ অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং কনসেপ্ট এবং ফান্ডামেন্টালসmedium.com

অবজেক্ট অরিয়েন্টেড সি++ (Class এবং Class Members)
সি++ প্রোগ্রামিং এর আসল উদ্দেশ্য হচ্ছে সি প্রোগ্রমিং এর মধ্যে অবজেক্ট অরিয়েন্টেশন যুক্ত করা এবং সি++ এর class গুলো…bit.ly

অবজেক্ট অরিয়েন্টেড সি++ (Class এবং Class Members)
এই লিখাটি পূর্বে আমার ব্যাক্তিগত ব্লগে পাব্লিশ হয়েছে। পড়তে পারবেন এখান থেকে — medium.com

অবজেক্ট অরিয়েন্টেড সি++ এবং Access Modifiers
চলেন আবার কথা বলি আমাদের গাড়ি নিয়ে। গাড়ি আসলেই একটা মজার জিনিস, কিন্তু লায়াবিলিটি, খালি খরচ বাড়ায়। যাই হোক অই…bit.ly

অবজেক্ট অরিয়েন্টেড সি++ এবং Access Modifiers
Public vs Private vs Protectedmedium.com

অবজেক্ট অরিয়েন্টেড সি++ এবং ইনহেরিটেন্স (Inheritance)
এই আর্টিকেলটি পূর্বে আমার ব্যক্তিগত ব্লগে পাবলিশ হয়েছে। পড়তে পারবেন এখান থেকে — medium.com

অবজেক্ট অরিয়েন্টেড সি++ এবং ইনহেরিটেন্স (Inheritance)
বাবার সম্পত্তি সন্তাররাই পাবে, এটাই সত্য। এটাকে বলে উত্তরাধিকার সূত্রে পাওয়া। ইংরেজীতে Inheritance (ইনহেরিটেন্স)। ঠিক…bit.ly

POLYMORPHISM এবং অবজেক্ট অরিয়েন্টেড সি++
সি++ এ বহুরূপতা কি, কেন এবং একটি ছোট Introduction to Virtual Functionmedium.com

POLYMORPHISM এবং অবজেক্ট অরিয়েন্টেড সি++
আজ কথা বলবো বহুরূপতা নিয়ে। বহুরূপতা কি? কখনো চিন্তা করেছেন কি আমরা মানুষরা একটি বহুরূপি প্রাণী?bit.ly

আজকে এই পর্যন্তই। ধন্যবাদ সাথে থাকার জন্য।

#হ্যাপি_প্রোগ্রামিং


আমার ব্যাক্তিগত ব্লগ — 

বাংলা ভার্শন —  https://with.dibakar.me/

ইংলিশ ভার্শন —  https://with.dibakar.me/en/

আমাকে পাবেন — 

ফেসবুকে —  https://www.facebook.com/dipu.dibakar

মিডিয়ামে —  https://medium.com/@iamdibakardipu

টুইটারে —  https://twitter.com/iamdibakardipu

ইনস্টাগ্রামে —  https://www.instagram.com/dibakardipu/

গিটহাবে —  https://github.com/dibakarsutradhar

লিঙ্কড ইনে —  https://linkedin.com/in/dibakardipu/

Posts created 18

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top
Scroll Up