Ukieweb

Diary

I write here what I learn

Object Oriented Programming : Object & Class

Object Oriented Programming : Object & Class

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

Object Oriented Programming

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

  • Procedural
  • Structured
  • Functional

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

$length=5;
$width=6;

$area=$length*$width;

echo $area;

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

function area($length, $width)
{
	return $length*$width;
}

echo area(5, 6);

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

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

Sumon ভাইয়ের কথায় বলতে গেলে

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

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

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

তাহলে Class ও Object কি?

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

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

class Man
{
	function hand($substance){
		return 'I grab the '.$substance;
	}

	function leg($path)
	{
		return 'I go to '.$path;
	}

	function mouth($food)
	{
		return 'I eat '.$food;
	}

	function eye($object)
	{
		return 'I watch '.$object;
	}
}

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

$nahid = new Man;

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

echo $nahid->mouth('burger');

Output

I eat burger

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

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

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

$firoz = new Man;

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

echo $firoz->eye('TV');

Output

I watch TV

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

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

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

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

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

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

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

ধন্যবাদ :)

5 Comments

12/12/2015

চমৎকার লিখেছেন :) । অনেক কিছুই ভুলে গেছিলাম :P

14/12/2015

ধন্যবাদ ভাই :)

30/01/2016

ভাই লেখা টা চালিয়ে জান। যতবার ফিল করতে না পারব ততবার দেখব।

30/01/2016

ভাই লেখা টা চালিয়ে জান। যতবার ফিল করতে না পারব ততবার দেখব।

30/07/2016

ইনশা'আল্লাহ ভাই :)

To make a comment you have to login