মেথড (কম্পিউটার বিজ্ঞান)

(মেথড থেকে পুনর্নির্দেশিত)

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এ একটি মেথড হলো একটি ফাংশন বা সাবরুটিন যা একটি ক্লাসের সাথে সম্পর্কিত। মেথড একটি ক্লাসের ইন্সট্যান্স(instances) এর গতিবিধি নির্ধারণ করে প্রোগ্রামের রানটাইমে। মেথডের একটি বৈশিষ্ট্য হলো এরা রানটাইমে একটি ক্লাসের ইন্সট্যান্স এ সংরক্ষিত তথ্য নিয়ে কাজ করতে পারে এবং ইন্সট্যান্স এর অবস্থা(state) নিয়ন্ত্রণ করতে পারে। [১]

ক্লাস এবং মেথডের সম্পর্ককে বলা হয় বাইন্ডিং। সম্পর্কটি কম্পাইল করার সময় তৈরি হলে সেটাকে বলা হয় স্ট্যাটিক বাইন্ডিং, রানটাইমে তৈরি হলে বলা হয় ডাইনামিক বাইন্ডিং। [২]

উদাহরণসম্পাদনা

জাভাসম্পাদনা

নিচের কোডে জাভাতে "মেইন" নামক ক্লাসে একটি মেথড তৈরি করা হয়েছে যা একটি আয়তক্ষেত্রের ক্ষেত্রফল নির্ণয় করতে পারে।

public class Main
{
	int rectangle(int h,int w)
	{
		return h*w;
	}
}

সি++সম্পাদনা

class Main
{
        public:
        int rectangle(int h,int w)
        {
                return h*w;
        }
};

পাইথনসম্পাদনা

নিচের পাইথন কোডে একটি ক্যালকুলেটর ক্লাস তৈরি করা হয়েছে যা দুটি নম্বর যোগ করতে পারে।[৩]

class Calculator:
    def set( self, first, second ):
        self.a = first
        self.b = second

    def add( self ):
        return self.a + self.b

অ্যাবস্ট্রাক্ট মেথডসম্পাদনা

অ্যাবস্ট্রাক্ট মেথডে মেথডটি কিভাবে কাজ করবে বলা হয়না,শুধুমাত্র মেথডে সিগনেচার দেয়া থাকে। অন্য একটি সাবক্লাস মেথডটিকে কাজ বর্ণনা করে। জাভাসহ কিছু কিছু প্রোগ্রামিং ভাষায় ইন্টারফেস তৈরি করতে অ্যাবস্ট্রাক্ট মেথড ব্যবহার করা হয়।

উদাহরণসম্পাদনা

রথম  ডটি একটি বস  একটি বস থড িগন ি কর হয়েে। পর Main2 বকসটি থডটি বরণন করে।

abstract class Main{
	abstract int rectangle(int h,int w);
}

public class Main2 extends Main{
	
	@Override
	int rectangle(int h,int w)
	{
		return h*w;
	}
	
}

ওভারলোডেড মেথডসম্পাদনা

একটি ক্লাসে একই নামে একাধিক মেথড তৈরি করা যায়। তবে একই নামের যেকোনো দুটি মেথডের সবগুলো প্যারামিটার ও রিটার্ণটাইপ একই হতে পারবেনা। মেথড কল করার সময় প্যারামিটার আর রিটার্ণ টাইপ দেখে বুঝে নেয়া হয় কোন মেথডটিকে কল করা হয়ছে। একে ওভারলোডেড মেথড বা মেথড ওভারলোডিং বা ফাংশন ওভারলোডিং বলা হয়।

উদাহরণসম্পাদনা

নিচের সি++ কোডে জিওমেট্রি ক্লাসের মধ্যে দুটি এরিয়া মেথড তৈরি করা হয়েছে। দুটির প্যারামিটার ভিন্ন।

#include<iostream>
using namespace std;
class geometry{
	public:
	static double area(double h,double w){
		return h*w;
	}
	static double area(double r){
		return r*r*3.14;
	}
};
int main(){
	double rectangle_area=geometry().area(3,4);
	double circle_area=geometry().area(5);
	cout<<rectangle_area<<endl;
	cout<<circle_area<<endl;
	return 0;
}

ওভাররিডেন মেথডসম্পাদনা

কোনো ক্লাসের মেথডকে সাবক্লাসে নতুন করে বর্ণনা করা হলে তাকে ওভাররিডেন(Overridden) মেথড বলা হয়। এটা সুপারক্লাসের আসল মেথডকে লুকিয়ে সাবক্লাসে নতুন করে বর্ণনা করে। ওভারলোডেড মেথডের সাথে এটার পার্থক্য হলো এক্ষেত্রে মেথড দুটি ভিন্ন ভিন্ন ক্লাসে থাকে। [৪] ওভাররিডেন মেথডের ক্ষেত্রে নতুন মেথডের প্যারামিটার ও রিটার্ণ টাইপ আসল মেথডের সমান হতে পারে।

উদাহরণসম্পাদনা

নিচের জাভা কোডে ক্লাস১ এর f মেথডকে ওভাররাইড করেছে ক্লাস২ এর f মেথড। ক্লাস২ এর ২য় মেথডটি প্রথমটিকে ওভারলোড করেছে।

public class class1
{
	int f(int x)
	{
		return x+3;
	}
}

public class class2 extends class1
{
	@Override
	int f(int x) //overriding
	{
		return x*x;
	}
	int f(int x,int y) //overloading
	{
		return x*y;
	}
}

অপারেটর মেথডসম্পাদনা

অপারেটর মেথড ক্লাসে +,-,<,> ইত্যাদি অপারেটরের কাজ নির্ধারণ করে।

উদাহরণসম্পাদনা

class data
{
	public:
	string name;
	int roll;
	bool operator < ( const data& p ) const { 
		return roll < p.roll; 
	}
	bool operator == ( const data& p ) const { 
		return (name==p.name) and (roll==p.roll);
	}
};

কনস্ট্রাক্টর মেথডসম্পাদনা

একটি ক্লাসের ইনস্ট্যান্স তৈরি করার সময় কনস্ট্রাক্টর মেথড স্বয়ংক্রীয়ভাবে কল হয়। কনস্ট্রাক্টর মেথড মূলত ব্যবহার করা হয় ক্লাসের ভ্যারিয়েবলগুলোর প্রাথমিক মান নির্ধারণ করা জন্য এবং ক্লাসটিকে কাজ করতে প্রস্তুত করার জন্য। কনস্ট্রাক্টর মেথডের নাম আর ক্লাসের নাম একই হতে হয় এবং মেথডটি প্যারামিটার গ্রহণ করলেও কোনো রিটার্ন টাইপ থাকেনা। কোনো কনস্ট্রাক্টর মেথড ডিক্লেয়ার করা না হলে ডিফল্ট কনস্ট্রাকটরকে কল করা হয়।[৫] ওভারলোডিং এর মাধ্যমে একটি ক্লাসে একাধিক কনস্ট্রাক্টর ডিক্লেয়ার করা যায়।

উদাহরণসম্পাদনা

নিচের জাভা কোডে মেইন নামক ক্লাসে কনস্ট্রাক্টরের সাহায্যে ভ্যারিয়েবলগুলোর প্রাথমিক মান নির্ধারণ করা হয়েছে।

public class Main
{
	String name;
	int roll;
	Main(String _name,int _roll){ //constructor method
		(this).name=_name;
		(this).roll=_roll;
	}
	
}

ডিস্ট্রাক্টর মেথডসম্পাদনা

যখন একটা অবজেক্টের জীবনকাল শেষ হয়ে যায় তখন স্বয়ংক্রিয় ভাবে ডিস্ট্রাক্টর মেথড কল করা হয় মেমরি থেকে অবজেক্টটি সরিয়ে নেবার জন্য। [৬]

উদাহরণসম্পাদনা

#include <iostream>
#include <string>
 
class foo
{
        public:
 
        foo( void )
        {       
                print( "foo()" );
        }       
 
        ~foo( void )
        {       
                print( "~foo()" );
        }
 
        void print( std::string const& text ) 
        {
                std::cout << static_cast< void* >( this ) << " : " << text << std::endl;
        }
 
/* 
        Disable copy-constructor and assignment operator by making them private
*/ 
        private:
 
        foo( foo const& );
 
        foo& operator = ( foo const& );
};
 
int main( void )
{
        foo array[ 3 ];
/* 
        When 'main' terminates, the destructor is invoked for each element 
        in 'array' (the first object created is last to be destroyed)
*/
}

আরো দেখুনসম্পাদনা

সাবরুটিন

তথ্যসূত্রসম্পাদনা

  1. "সংরক্ষণাগারভুক্ত অনুলিপি"। ৬ জুন ২০১২ তারিখে মূল থেকে আর্কাইভ করা। সংগ্রহের তারিখ ১৭ জুন ২০১২ 
  2. http://www.devx.com/tips/Tip/13492
  3. http://hukush-pakush.appspot.com/chap8
  4. http://www.codeproject.com/Articles/16407/METHOD-Overload-Vs-Overriding
  5. http://www.allinterview.com/showanswers/61229.html
  6. http://php.net/manual/en/language.oop5.decon.php