অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বেসিক কনসেপ্ট

  Object-Oriented Programming



আজ আলোচনা করব প্রোগ্রামিং এর সবচেয়ে গুরুত্বপূর্ণ Concept “OOP” নিয়ে । Object-oriented programming (OOP) মূলত চারটি খুঁটির উপর নীর্বর করে দাড়িয়ে আছে । খুঁটিগুলো হল -

  1. Abstraction
  2. Encapsulation
  3. Inheritance
  4. Polymorphism

এই খুঁটিগুলো নিয়ে বিশাদ আলোচনা করার আগে জেনে নেই প্রোগ্রামিং এ OOP আবার কি জিনিস ? এক কথায় বলতে গেলে - ক্লাস এবং অবজেক্টের ধারণাকে কাজে লাগিয়ে যে প্রোগ্রামিং করা হয় তাকেই বলা হয় অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং।

তাহলে এই যে বললাম অবজেক্ট ও ক্লাস ধারণাকে কাজে লাগিয়ে যে প্রোগ্রামিং করা হয় তাকেই বলা হয় অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বলে । এই অবজেক্ট ও ক্লাস কি ? একটু জেনে নেওয়া যাক -


অবজেক্ট হলো কোন একটি ক্লাস এর একটি মূর্ত অস্তিত্ব ৷ আর ক্লাস হলো অবজেক্ট তৈরীর একটা ব্লুপ্রিন্ট বা সংগা যা নির্দিষ্ট করে দেয় ওই ক্লাসের একটি অবজেক্টের কী কী গুনাগুন হবে ৷ যেমন – আপনি নিজে, যে কিনা কোথাও বিরাজ করছেন, আপনি হলেন একজন মানুষ / হিউম্যান ৷ এবং আপনার মতই আরো অনেক মানুষ আছেন ৷ এখানে আপনারা সবাই একেকটি অবজেক্ট, আর আপনের সবার ক্লাস হলো “মানুষ” ৷ খেয়াল করুন “মানুষ” বলতে আমরা নির্দিষ্ট কোন ব্যক্তিকে বোঝাচ্ছি না, বরং “মানুষ” বলতে আমরা এক শ্রেনীর প্রাণী বুঝি এবং তার গুনাগুন সম্পর্কে একটি ধারনা পায় ৷ ধরুন হঠাৎ এমন হলো যে দুনিয়াতে আর কোন মানুষ নেই, তখনও কিন্তু “মানুষ” বলতে কিছু একটা ধারনা পাওয়া যাবে ৷ বাস্তবের মতই OOP তে “মানুষ” হলো আপনার ক্লাস, আর আপনি, আমি, আমরা সবাই একেকটি অবজেক্ট ৷

OOP কি বুঝলাম, কিন্তু প্রোগ্রামিং এ OOP ধারনা কেন আসল কিনবা এটার Importance কি ?

আমরা সাধারণত ফাংশনাল প্রোগ্রামিং নিয়ে যেমনঃ সি তে একটা সময় কাজ করি, কিন্তু বৃহৎ আকারের কোনো সফটওয়্যার বানাতে গেলে আমার লিখা কোডগুলো যেন আরেকজনের কাছে বোধগম্য হয় এবং কোনো ঝামেলা ছাড়াই আরেকজন যেন সেটা নিয়ে কাজ করতে পারে(Resuability) এবং ছোটো ছোটো ভাগে ভাগ(Modularity) করা যায় সেই সুবিধা গুলো থাকা দরকার। তাছাড়া ইচ্ছা হলেই যেন তাতে একদম নতুন কিছু বৈশিষ্ট্য (Extensibility) জুড়ে দেয়া যাবে কিংবা ডিবাগ করা যাবে সেই অপশন রাখাটাও জরুরী। তাছাড়া স্পর্শকাতর কোনো ইনফরমেশন চাইলেই সফটওয়্যার ডেভেলপিং এর সময় আরেকজনের কাছে শো করবেনা এই ব্যাপারটাও(Information Hiding) নিশ্চিত করা জরুরী । সেই তাড়না থেকেই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কনসেপ্টটার সৃষ্টি ।

এখন তাহলে OOP এর ভিক্তিগুলো নিয়ে আলোচনা করার সময় হয়েছে -

Inheritance: মানেই হচ্ছে উত্তরাধিকার। এটি দুই বা দুইয়ের অধিক class এর মধ্যে রিলেশনশিপ express করার একটি পদ্ধতি। OOP তে কোন ক্লাস ও অবজেক্ট যদি আগের কোন ক্লাস হতে কিছু বৈশিষ্ট্য বা properties পেয়ে থাকে তবে প্রোগ্রামিং এ সেটাই হল Inheritance. যে ক্লাস থেকে properties গুলো নেয়া হয় তাকে বলে super class এবং যে এই properties গূলো পায় তাকে sub class/derieved class বলে। Inheritance উদাহরণ দিতে গেলে প্রথমেই যে উদাহরণ টি আসে তা হল , বাবা ছেলের সম্পর্ক। দরুন আপনার বাবার ১০ বিঘা সম্পত্তি আছে , উত্তরাধিকার সূত্রে সেই সম্পত্তির মালিক কিন্তু আপনি । এখন আপনি চাইলে সেই সম্পত্তির সাথে আরও সম্পত্তি যুক্ত করতে পারেন। কিনবা তাই রাখতে পারেন  অথবা কিছু বিক্রি ও করে দিতে পারেন । 
 

Encapsulation: বলতে বুঝানো হয় একটা প্যাকেজিং। Structured Programming এ আমরা structure পড়েছি, এককথায় structure কে বলা যায় একাধিক ভ্যারিয়েবলের একটা প্যাকেট। ধরা যাক, যদি আমি একটা কাঁচাগোল্লা, কালোজাম, আর মন্ডা নিয়ে একটা প্যাকেট বানাই, তাহলে সেটা হবে একটা কাঁচাগোল্লা, কালোজাম আর মন্ডার একটা প্যাকেট, যেটাকে আমরা “মিষ্টান্ন” নাম দিতে পারি। কিন্তু এই প্যাকেটে কোন security নেই, যে কেউ যখন তখন চুরি করে মিষ্টি খেয়ে ফেলতে পারে। OOP তে encapsulation আমাদেরকে ensure করে যে কেউ চুরি করে মিষ্টি খেয়ে ফেলতে পারবে না, কিংবা চট করে মিষ্টি বদলে দিতে পারবে না।


Polymorphism: বলতে আমরা, বুঝি একই অবজেক্টের নানা রকম রূপ পাওয়ার ক্ষমতা। সহজ বাংলায় উদাহরণ দিতে গেলে ধরেন "স্তন্যপায়ী" প্রানী একটা অবজেক্ট। এখন মানুষ স্তন্যপায়ী, কুকুর বিড়ালও স্তন্যপায়ী আবার ডলফিনও স্তন্যপায়ী। এরা প্রত্যেকে স্তন্যপায়ীর কিছু সাধারন বৈশিষ্ট্য বহন করছে যে তারা মায়ের দুধ খেয়ে বড় হয়, এরা প্রত্যেকে বাচ্চা প্রসব করে - কেউই ডিম দেয় না। কিন্তু যদি বলে ডাক দিতে, এরা একেকজন একেক আচরণ করে। আমরা আমাদের মত কথা বলে ডাকি, বিড়াল, কুকুর তাদের মত করে - এখানে কারোর সাথে কারোর মিল নেই। অথচ এরা সবাই স্তন্যপায়ী। ঠিক একই ভাবে প্রোগ্রামিংয়ে যখন কয়েকটি অবজেক্ট একটা সাধারণ ইন্টারফেস ইমপ্লিমেন্ট করে বা একটি কমন অবজেক্ট এক্সটেন্ড করে তৈরী হয়, সেই ঘটনা কেই বলা হয় পলিমর্ফিজম।
 
Abstraction: প্রয়োজনীয় এবং অপ্রয়োজনীয় তথ্যে /ডাটার ভীড়ে অপ্রয়োজনীয় তথ্য বাদ দিয়ে কেবল কাজের এবং দরকারী তথ্য নিয়ে কাজ করাকেই অ্যাবস্ট্রাকশন বলে যেমনঃ ধরেন আমার একটা বাইসাইকেল আছে এখন সেই সাইকেলটা চালানোর সময় আমি যদি ব্রেক চাপ দেই সেটা থেমে যাবে তো সেক্ষেত্রে আমার কিন্তু জানলেই হচ্ছে কোনটায় চাপ দিলে ব্রেক কাজ করে কিংবা কোনটায় চাপ না দিলে ব্রেক কাজ করবে না…আমার কিন্তু এখানে জানা লাগছে না যে ব্রেকের ভেতরের মেকানিজম টা কি….এই যে প্রয়োজনীয় অংশ টা জানলেই কাজ হয়ে যাচ্ছে ভেতরের ব্যপার জানা লাগছে না এই ধর্মটাকেই বলে আবস্ট্রাকশন ইন OOP. এভাবে বলা যায় যে, Hiding internal details and showing functionality is known as abstraction.  উদাহারণ হিসেবে আরো দেয়া যায় যে ধরূন একটা এটিএম বুথে গেলে এটিএম মেশিনথেকে আমরা টাকা তুলতে পারি, টাকা জমা দিতে পারি কিন্তু আমরা জানিনা যে এটিএম মেশিন আসলে কিভাবে কাজ করছে কিন্তু তা না জানা সত্তেও আমরা কিন্তু কয়েকটা বাটন প্রেস করেই এর সুবিধা নিতে পারছি সুতরাং এই ব্যাপারটাই আসলে Abstraction.







 

Comments

  1. "স্তন্যপায়ী" প্রানী একটা অবজেক্ট।এটার ক্লাস কি প্রানী?

    ReplyDelete
    Replies
    1. হা, এটার ক্লাস প্রানী ধরতে পারেন।

      Delete

Post a Comment

Popular posts from this blog

Business Benefits of Using Flutter Technology

ডার্ট প্রোগ্রামিংয়ের খুবই গুরুত্বপূর্ণ ফিচার Async & Await কি? কেন?

ডার্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ দিয়ে অপ্রত্যাশিত ইভেন্ট বা ঘটনা কিভাবে হ্যান্ডেল করবেন?