পিএইচপি — অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (ক্লাস ও অবজেক্ট)

--

আসসালামুআলাইকুম, আজকে PHP Object Oriented Programming নিয়ে লিখতে বসেছি। ভিতরে অনেক ভয় কাজ করছে কোনো ভুল হচ্ছে কিনা তা নিয়ে কারন ব্যপারটা ততটা সহজ নয়, আর আমি নিজেও একজন শিক্ষার্থী তাই ভুল হওয়াটাই স্বাভাবিক, ভুল হলে সেগুলো ধরিয়ে দিলেই বেশি খুশি হবো।

Object Oriented Programming কি?

Object Oriented Programming? আসলে কি এটি? তাহলে আমরা এতদিন যে প্রোগ্রামিং করে এসেছি সেটিই বা কি? চলুন দেখি OOP ছাড়াও কি কি প্রোগ্রামিং স্টাইল আছে

এছাড়াও আরো বেশ কিছু স্টাইল রয়েছে। আমরা মূুলত Procedural ও Functional স্টাইল সম্পর্কে পরিচিত। এ পদ্ধতিতে প্রোগ্রামের স্টেটমেন্টগুলো Step by Step লিখা হয় অথবা Function এর মাধ্যমে লেখা হয়। Procedural এর একটি উদাহরণ দেই PHP এর কোডের মাধ্যমে। এখানে আমরা বস্তুর ক্ষেত্রফল বের করবো

কিন্তু এই কাজটিই যদি আমরা Functional পদ্ধতিতে করি তবে কেমন হয়?
হুম, ভালোই হয়।
নিচের উদাহরণটি দেখুন

এখানে দেখুন উপরের পদ্ধতির থেকে নিচের পদ্ধতির কোডগুলো অনেক গুছানো মনে হচ্ছে। তারথেকেও বড় কথা আমি এ কোডটিকে পূন:ব্যবহার করতে পারবো এবং এর রিটার্ন ভ্যালু নিয়ে অন্য কোনো ফাংশানের প্যারামিটারে ব্যবহারও করতে পারবো। যাই হোক উপরে দুটি প্রোগ্রামিং স্টাইল দেখলাম এবং এগুলোর সাথে আমরা সবাই মোটামুটি পরিচিত আর ঠিক এরকমেরই একটি প্রোগ্রামিং স্টাইল হলো Object Oriented Programming. কি বুঝলেন OOP একটি ল্যাংগুয়েজ? না এটি কোনো ল্যাংগুয়েজ না এটি একটি প্রোগ্রামিং স্টাইল যেটি মডার্ন প্রায় সকল ল্যাংগুয়েজেই আপনি প্রয়োগ করতে পারবেন।

এবার প্রশ্ন হলো Object Oriented Programming কি?

এককথায় কথায় বলতে গেলে -

অবজেক্ট আর ক্লাস নিয়ে প্রোগ্রামিং করাই Object Oriented Programming

হ্যা কথা কিন্তু সত্য, আমার কাছে তথ্য আছে। :D

একটু ব্যাখ্যা করে বলতে গেলে OOP হলো কিছু ফাংশনালিটি ও ভেরিয়েবলের সেট যা কেনো নির্দিষ্ট প্রয়োজন মেটায় বা নির্দিষ্ট সমস্যার সমাধান করে। এবং প্রয়োজনে আমরা ঐ অবজেক্ট থেকে এর ফাংশনালিটিজ বা প্রপার্টিজগুলোকে ব্যবহার করতে পারি। সহজভাবে বলতে গেলে এটিই OOP.

তাহলে Class ও Object কি?

যেহেতু এই ফাংশনালিটি ও ডাটা সেট কোনো নির্দিষ্ট সমস্যার সমাধান করে এবং এসকল ফাংশন ও ডাটা গুলো একই গোত্রের অন্তর্ভূক্ত তাই এগুল‌োকে আমরা একটি নির্দিষ্ট গোত্রের অধীনে রাখতে পারি। আর এই নির্দিষ্ট গোত্রটিকেই আমরা আদর করে class ডাকি। আর এই class এর বৈশিষ্ট্যগুলো যখন ব্যবহারের জন্য কোনো ভেরিয়েবলে এসাইন করা হয় তখন তাকে বলি object. ‍Object হলো class এর একটি Avatar(অবতার)।

আরেকটু ব্যাখ্যা করি, আমরা একটু আধ্যাত্মিক চিন্তা ভাবনায় যাই। ধরুন সৃষ্টিকর্তা মানুষের কিছু বেসিক ফাংশনালিটি নিয়ে একটি class তৈরী করলেন যাতে একটি মানুষের হাত, পা, চোখ ও মুখ থাকবে। এ চারটি হলো মানুষের বেসিক ফাংশনালিটি। অর্থাৎ সৃষ্টিকর্তা ভাবলেন এ চারটি সকল মানুষেরই থাকবে। কিন্তু তারপরেও প্রতিটি মানুষ এক নয়। সবাই সতন্ত্র। সবার নিজস্বতা আছে। আমার যেমন হাত, পা, চোখ ও মুখ আছে ঠিক তেমনি আমার বন্ধু ফিরোজের ও হাত, পা, চোখ ও মুখ আছে। তারপরেও কিন্তু আমি আর ফিরোজ এক নয়। দুজন আলাদা আলাদা দুটো মানুষের অবজেক্ট। চলুন মানুষ নিয়ে একটি ক্লাস বানিয়ে ফেলি।

যেহেতু এসকল ফাংশানগুলো মানুষের সাহায্যকারি তাই এগুলো Man Class বা শ্রেনীর অন্তর্ভূক্ত। এখানে ধরে নিলাম সৃষ্টিকর্তা মানুষের স্বাভাবিক বৈশিষ্ট্যগুলো তৈরী করে রেখেছেন কিন্তু যেহেতু এ বৈশিষ্টগুলো কোনো দেহের ভিতর দেয়া হয়নি তাই মানুষেকে আমরা সরাসরি ব্যবহার করতে পারবোনা। এজন্য আমাকে নতুন একটি মানুষ তৈরী করতে হবে এবং এর মধ্যে এ ফাংশানালিটিজ গুলো দিয়ে দিতে হবে। চলুন দেখি কিভাবে একটি নতুন মানুষের অবজেক্ট তৈরী করা যায়।

আমরা নতুন একটি মানুষ তৈরী করেছি $nahid নামে। এখন আমরা চাইলে $nahid এর হাত, পা, চোখ ও মুখ ব্যবহার করতে পারবো বা এ ফাংশানগুলোকে দিয়ে কাজ করাতে পারবো।

Output

I eat burger

যেহেতু $nahidMan এর সকল বৈশিষ্ট্য দিয়ে দিয়েছি তাই $nahid Man এর সকল বৈশিষ্ট্যই পাবে।

মনে রাখবেন কোনো অবজেক্ট থেকে এর ফাংশান ও ভেরিয়বল কে কল করার জন্য ‍-> সিম্বলটি ব্যবহার করা হয়।

আমরা এখন এ Man ক্লাসটিকে দিয়ে আরো অনেক মানুষ তৈরী করতে পারবো।

এখানে $nahid$firoz সেম অবজেক্ট বা মানুষ না। দুজনেই আলাদা দুটো সত্ত্বা। দুজনেই আলাদা আলাদা কাজ করতে পারবে।

Output

I watch TV

পরবর্তিতে আমি Constructor নিয়ে আলোচনা করবো, সেখানে এটি আরো ভালোভাবে ব্যাখ্যা করা যাবে।

OOP এর কি দরকার? এমনিই তো ভালো আছি

হ্যা কথা যৌক্তিক কথা, কিন্তু ভাইজান OOP এর দরকারের শেষ নাই। আপনাকে ভালো প্রোগ্রামার হতে হলে OOP জানা লাগবেই। হ্যা লাগবেই :(

  • OOP এ কোড পরিচ্ছন্ন থাকে তাই এটি সহজেই বোঝা যায়।
  • কোড পূন:ব্যবহারের সুযোগ আছে। একই কোড সমস্ত প্রোজেক্ট অথবা অন্য প্রজেক্টেও ব্যবহার করতে পারবেন।
  • প্রোজেক্টের ফাংশানালিটিকে মডুলার পদ্ধতিতে কাজ করার সুযোগ দেয়।
  • প্রোজেক্ট মেনটেইন্যান্স এ সহায়ক হয়।
  • সহজেই এর বাগ ফিক্স করা যায়, অর্থাৎ এক জায়গাতে সমাধান করলে এর ব্যবহৃত সকল জায়গাতেই তার ইফেক্ট পরে।
  • নতুন প্রোগ্রামার প্রোজেক্টে ইনভলব হলেও সমস্যা হয়না, সহজেই আয়ত্ব করতে পারে।
  • কোডের সিকুরিটি বৃদ্ধি পায়।
  • লার্জ স্কেল অ্যাপ্লিকেশন ডেভলপে এর জুড়ি নেই।
  • আরো অনেক কিছু …

বি:দ্র: আমি class এর প্রতিটি জায়গায় Function কথাটি উল্লেখ করেছি, কিন্তু মনে রাখবেন রক্ত যখন দিয়েছি রক্ত আরো দিবো, স্যরি class যখন লিখেছি class আরো লিখবো class এর function কে methodvariable কে property বলে ছাড়বো ইনশাআল্লাহ।

তো ফ্রান্স এতোক্ষন যা দেখলেন আসলেই এটিই ছিলো OOP.

জনাব অথবা জনাবা আমার জানায় ভূল থাকতে পারে। ভুল ধরিয়ে দিয়ে সংশোধন করতে অনুরোধ করা গেল‌ো

ধন্যবাদ :)

অরিজিনাল লিংক (১৮+ নহে): https://nahid.im/diary/read/13/object-oriented-programming-object-class

--

--