আসসালামুআলাইকুম, আজকে Object Oriented Programming নিয়ে লিখতে বসেছি। ভিতরে অনেক ভয় কাজ করছে কোনো ভূল হচ্ছে কিনা তা নিয়ে কারন ব্যপারটা ততটা সহজ নয়। তাই ভূল হওয়াটাই স্বাভাবিক, ভূল হলে সেগুলো ধরিয়ে দিলেই বেশি খুশি হবো।
Object Oriented Programming? আসোলে এটি কি? তাহলে আমরা এতদিন যে প্রোগ্রামিং করে এসেছি সেটিই বা কি? চলুন দেখি OOP ছাড়াও কি কি প্রোগ্রামিং স্টাইল আছে
- Procedural
- Structured
- Functional
এছাড়াও আরো বেশ কিছু স্টাইল রয়েছে। আমরা মূুলত Procedural ও Functional স্টাইল সম্পর্কে পরিচিত। এ পদ্ধতিতে প্রোগ্রামের স্টেটমেন্টগুলো Step by Step লিখা হয় অথবা Function এর মাধ্যমে লেখা হয়। Procedural এর একটি উধাহরন দেই PHP এর কোডের মাধ্যমে। এখানে আমরা বস্তুর ক্ষেত্রফল বের করবো
https://gist.github.com/db372a2c4a6e9817d266b5c86acf2593
কিন্তু এই কাজটিই যদি আমরা Functional পদ্ধতিতে করি তবে কেমন হয়? হুম ভালোই হয়। নিচের উধাহরনটি দেখুন
https://gist.github.com/79efbd3ebe96de5db6898af430b9f190
এখানে দেখুন উপরের পদ্ধতির থেকে নিচের পদ্ধতির কোডগুলো অনেক গুছানো মনে হচ্ছে। তারথেকেও বড় কথা আমি এ কোডটিকে পূন:ব্যবহার করতে পারবো। যাই হোক উপরে দুটি প্রোগ্রামিং স্টাইল দেখলাম এবং এগুলোর সাথে আমরা সবাই মোটামুটি পরিচিত আর ঠিক এরকমেরই একটি প্রোগ্রামিং স্টাইল হলো Object Oriented Programming. কি বুঝলেন OOP একটি ল্যাংগুয়েজ? না এটি কোনো ল্যাংগুয়েজ না এটি একটি প্রোগ্রামিং স্টাইল যেটি মডার্ন সকল ল্যাংগুয়েজেই আপনি প্রয়োগ করতে পারবেন।
Sumon ভাইয়ের কথায় বলতে গেলে
অবজেক্ট আর ক্লাস নিয়ে প্রোগ্রামিং করাই Object Oriented Programming
হ্যা কথা কিন্তু সত্য, আমার কাছে তথ্য আছে :D
একটু ব্যাখ্যা করে বলতে গেলে OOP হলো কিছু ফাংশনালিটি ও ভেরিয়েবলের সেট যা কেনো নির্দিষ্ট প্রয়োজন মেটায় বা নির্দিষ্ট সমস্যার সমাধান করে। এবং প্রয়োজনে আমরা ঐ অবজেক্ট থেকে এর ফাংশনালিটিজ বা ভেরিয়েবলগুলোকে ব্যবহার করতে পারি। সহজভাবো বলতে গেলে এটিই OOP.
যেহেতু এই ফাংশনালিটি ও ডাটা সেট কোনো নির্দিষ্ট সমস্যার সমাধান করে এবং এসকল ফাংশন ও ডাটা গুলো একই গোত্রের অন্তর্ভূক্ত তাই এগুলোকে আমরা একটি নির্দিষ্ট গোত্রের অধীনে রাখতে পারি। আর এই নির্দিষ্ট গোত্রটিকেই আমরা আদর করে class
ডাকি। আর এই class
এর বৈশিষ্ট্যগুলো যখন ব্যবহারের জন্য কোনো ভেরিয়েবলে এসাইন করা হয় তখন তাকে বলি object
. Object
হলো class
এর একটি Avatar(অবতার)।
আরেকটু ব্যাখ্যা করি, আমরা একটু আধ্যাত্তিক চিন্তা ভাবনায় যাই। ধরুন সৃষ্টিকর্তা মানুষের কিছু বেসিক ফাংশনালিটি নিয়ে একটি class তৈরী করলেন যাতে একটি মানুষের হাত, পা, চোখ ও মুখ থাকবে। এ চারটি হলো মানুষের বেসিক ফাংশনালিটি। অর্থাৎ সৃষ্টিকর্তা ভাবলেন এ চারটি সকল মানুষেরই থাকবে। কিন্তু তারপরেও প্রতিটি মানুষ এক নয়। সবাই সতন্ত্র। সবার নিজস্বতা আছে। আমার যেমন হাত, পা, চোখ ও মুখ আছে ঠিক তেমনি আমার বন্ধু ফিরোজের ও হাত, পা, চোখ ও মুখ আছে। তারপরেও কিন্তু আমি আর ফিরোজ এক নয়। দুজন আলাদা আলাদ দুটো মানুষের অবজেক্ট। চলুন মানুষ নিয়ে একটি ক্লাস বানিয়ে ফেলি।
https://gist.github.com/556622f83029ee48c1f13cb35ff80e9a
যেহেতু এসকল ফাংশানগুলো মানুষের সাহায্যকারি তাই এগুলো Man Class/শ্রেনীর অন্তর্ভূক্ত। এখানে ধরে নিলাম সৃষ্টিকর্তা মানুষের স্বাভাবিক বৈশিষ্ট্যগুলো তৈরী করে রেখেছেন কিন্তু যেহেতু এ বৈশিষ্টগুলো কোনো মানুষে দেয়া হয়নি তাই এটি আমরা সরাসরি ব্যবহার করতে পারবোনা। এজন্য আমাকে নতুন একটি মানুষ তৈরী করতে হবে এবং এর মধ্যে এ ফাংশানালিটিজ গুলো দিয়ে দিতে হবে। চলুন দেখি কিভাবে একটি নতুন মানুষের অবজেক্ট তৈরী করা যায়।
https://gist.github.com/cbfb58a463ed0e269ed0fb8e5bff4534
আমরা নতুন একটি মানুষ তৈরী করেছি $nahid
নামে। এখন আমরা চাইলে $nahid
এর হাত, পা, চোখ ও মুখ ব্যবহার করতে পারবো বা এ ফাংশানগুলোকে দিয়ে কাজ করাতে পারবো।
https://gist.github.com/2986856f97efd345ed051e2f22916f59
Output
I eat burger
যেহেতু $nahid
এ Man
এর সকল বৈশিষ্ট্য দিয়ে দিয়েছি তাই $nahid
Man
এর সকল বৈশিষ্ট্যই পাবে।
মনে রাখবেন কোনো অবজেক্ট থেকে এর ফাংশান ও ভেরিয়বল কে কল করার জন্য ->
সিম্বলটি ব্যবহার করা হয়।
আমরা এখন এ Man
ক্লাসটিকে দিয়ে আরো অনেক মানুষ তৈরী করতে পারবো।
https://gist.github.com/d8e64b489f5bf2669266830f442fe4b9
এখানে $nahid
ও $firoz
সেম অবজেক্ট বা মানুষ না। দুজনেই আলাদা দুটো সত্ত্বা। দুজনেই আলাদা আলাদা কাজ করতে পারবে।
https://gist.github.com/9b7b293c6639148de7e853a5777a079d
Output
I watch TV
পরবর্তিতে আমি Constructor
নিয়ে আলোচনা করবো, সেখানে এটি আরো ভালোভাবে ব্যাখ্যা করা যাবে।
হ্যা কথা যৌক্তিক কিন্তু ভাউ OOP এর দরকারের শেষ নাই। তোমাকে ভালো প্রোগ্রামার হতে হলে OOP লাগবেই।
- OOP এর কোড পরিচ্ছন্ন থাকে এটি সহজেই বোঝা যায়
- কোড পূন:ব্যবহারের সুযোগ আছে। একই কোড সমস্থ প্রোজেক্ট অথবা অন্য প্রজেক্টেও ব্যবহার করতে পারবেন
- প্রোজেক্টের ফাংশানালিটিকে মডুলার পদ্ধতিতে কাজ করার সুযোগ দেয়
- প্রোজেক্ট মেনটেইন্যান্স এ সহায়ক হয়
- সহজেই এর বাগ ফিক্স করা যায়।
- নতুন প্রোগ্রামার প্রোজেক্টে ইনভলব হলেও সমস্যা হয়না, সহজেই আয়ত্ব করতে পারে
- কোডের সিকুরিটি দেয়
- লার্জ স্কেল অ্যাপ্লিকেশন ডেভলপে এর জুড়ি নেই।
- আরো অনেক কিছু
বি:দ্র: আমি class
এর প্রতিটি জায়গায় Function
কথাটি উল্যেখ করেছি, কিন্তু মনে রাখবেন রক্ত যখন দিয়েছি রক্ত আরো দিবো, স্যরি class
যখন লিখেছি class
আরো লিখবো class
এর function
কে method
ও variable
কে properties
বলে ছাড়বো ইনশাআল্লাহ
আর এতোক্ষন যা দেখলেন এটিই OOP.
জনাব আমার জানায় ভূল থাকতে পারে। ভূল ধরিয়ে দিয়ে সংশোধন করতে অনুরোধ করা গেলো
ধন্যবাদ :)