Types of Methods in Java

Types of Methods in Java: हालांकि पिछले Posts में हमने जो Box Class बनाई है, उसमें केवल किसी Box Object के Data ही Store हो रहे हैं। फिर भी ये Class अपने आप में पूर्ण है। लेकिन ऐसा सामान्‍यत: होता नहीं है। सामान्‍यतया जितनी भी Classes होती हैं, उनके Data को Access करने के लिए उनमें कुछ Methods भी Define किए जाते हैं। ये Methods ही Class के विभिन्न Data के साथ प्रक्रिया करने के लिए एक Interface की तरह काम करते हैं।

किसी Class में Methods Define करके एक Class Creator Class के Data को General Use से Hide कर देता है, ताकि Object के Data को गलती से Modify ना किया जा सके। यानी Data Hiding की प्रक्रिया से Class Creator किसी Object के Data Structure को Abstraction प्रक्रिया द्वारा Hide कर देता है, जिससे Object के Data सुरिक्षत रहते हैं।

Box Class को एक उदाहरण में Use करके हमने किसी Box Object का Volume ज्ञात किया था। लेकिन ये Volume हमने main() Method में ज्ञात किया था। यानी Class के Data को main() Method में Use किया था। लेकिन वास्तव में Class के Data को Access करने वाले जितने भी Methods होते हैं, उन्हें Class के अन्दर ही Define कर दिया जाता है। इससे पहले कि हम Class में Volume ज्ञात करने का Method Add करें, पहले हम Method को परिभाषित करने की कोशिश करते हैं।

सामान्‍य जीवन में हर रोज हम हजारों काम करते हैं। लेकिन सभी प्रकार के काम हम अकेले नहीं कर सकते हैं। उदाहरण के लिए मानलो कि किसी Company में Car बनाई जाती है। तो Car बनाने के लिए जितने भी काम किए जाते हैं, वे सभी काम एक ही Company में नहीं होते हैं।

जैसे यदि Company में Car की Body बनाई जाती है, तो ये जरूरी नहीं होता है कि वही Company Car का Engine भी बनाए। इस स्थिति में Company Car के Engine को किसी और Company से खरीद लेती है और अपनी Car में उस Engine को Use कर लेती है।

चलिए, एक और उदाहरण लेते हैं। Computer Assembler करने वाली बहुत सी Companies हैं, लेकिन सभी Companies Computer का Processor, Hard Disk, Cabinet, Keyboard, Monitor आदि नहीं बनाती हैं। बल्कि जिस Company का Monitor अच्छा होता है, वह Company उस Company से अपने लिए Monitor Develop करवा लेती है। जिस Company का Keyboard अच्छा होता है, उस Company से अपनी Company के Label का Keyboard Develop करवा लेती है।

इसी तरह से Cabinet बनाने वाली Company से अपनी Company के Label का Cabinet Develop करवा लिया जाता है। यानी कोई Computer बनाने वाली Company Computer के लिए जरूरी सभी Devices स्वयं नहीं बनाती है, बल्कि अन्‍य Companies द्वारा अपनी Requirement को पूरा करवा लेती है।

हमारी जिस Class में main() Method होता है, उसे हम वह Company मान सकते हैं, जो Computer बनाने का काम करती है और main() Method की Requirements को पूरा करने के लिए जिन अन्‍य Methods को Develop किया जाता है, उन्हें हम उन अन्‍य Companies के समान मान सकते हैं, जो main() Method की Requirements को पूरा करती हैं।

main() Method व किसी भी अन्‍य Method में किसी प्रकार का यदि कोई अन्तर होता है, तो वह केवल Method के नाम का अन्तर होता है। यदि main() Method के नाम main के स्थान किसी अन्‍य नाम को Use कर लिया जाए और किसी अन्‍य Method other() के नाम other के स्थान पर main को Replace कर दिया जाए, तो ये other() Method ही main() Method बन जाएगा।

जिस तरह से हम main() Method लिखते हैं, उसी तरह से हम किसी अन्‍य Method को भी लिख सकते हैं। बस अन्तर केवल इतना है कि main() Method बाकी के अन्‍य Methods को Call करता है, उन्हें Use करता है और User की आवश्‍यकताओं को पूरा करता है। Volume ज्ञात करने के लिए हमने main() Method में निम्न Statement लिखा था:

volume = cpuCabinet.length * cpuCabinet.height * cpuCabinet.width;
System.out.println(“Volume is ” + volume);

हमें इन्हीं Statements को volume() Method में लिखना है। लेकिन चूंकि हम ये Method Box Class के अन्दर ही लिखेंगे, इसलिए हमें cpuCabinet.length के स्थान पर केवल length लिखना होगा। यानी ये Statement कुछ निम्नानुसार लिखना होगा:

volume = length * height * width;
System.out.println(“Volume is ” + volume); 

ऐसा इसलिए होता है क्योंकि जब किसी Class के Data को Access करने वाला Member Method उसी Class में Define किया जाता है, तब वह Method अपनी Class के Data को Directly Access कर सकता है। उसे Dot Operator का प्रयोग करने की जरूरत नहीं पडती है। लेकिन जब किसी Class के Data को Access करने वाला Method किसी दूसरी Class का Member Method होता है, तब उसे Dot Operator के Reference में ही दूसरे Class के Data को Access करना पडता है।

चूंकि हम जो volume() Method Define कर रहे हैं, वह Class के अन्दर ही Define किया जाएगा, इसलिए हमें Dot Operator के प्रयोग की जरूरत नहीं होगी बल्कि ये Method Directly Class के Data को Access करने में सक्षम है। किसी भी Method को Create करने के लिए हमने पहले भी बताया है कि हमें चार बातों की जरूरत पडती है।

  • Method का Access Specifier

इसके बारे में हम आगे विस्तार से चर्चा करेंगे, लेकिन यहां हम इसके केवल public ही Define करेंगे। जब किसी Method को public Define किया जाता है, तब उस Method को कोई भी अन्‍य Method Call कर सकता है, यानी उस Method का प्रयोग करके उस Method वाली Class के Data को कोई भी अन्‍य Method Access कर सकता है। यदि हम इसे public के स्थान पर private Declare करें, तो स्थिति बदल जाती है, जिसके बारे में हम बाद में चर्चा करेंगे।

  • Method का Return Data Type

जो Method किसी प्रकार का मान Return करते हैं, वे Method जिस प्रकार का मान Return करते हैं, उसी प्रकार के Data Type को यहां Use करना होता है। चूंकि हम हमारे इस उदाहरण में volume() Method से अभी किसी प्रकार का मान Return नहीं करवा रहे हैं, इसलिए हम Return Value Data Type के लिए void का प्रयोग करेंगे।

  • Method का नाम

Method का नाम वह Identifier होता है, जिसका प्रयोग करके कोई अन्‍य Method इसे Call कर सकता है और इसके द्वारा किए जाने वाले काम का फा;दा उठा सकता है। यानी volume() Method किसी Box Object का Volume ज्ञात करने का काम करता है, इसलिए कोई भी अन्‍य Method यदि किसी Box Object का Volume प्राप्त करना चाहता है, तो वह इस volume नाम द्वारा ही volume() Method की सुविधाओं को प्राप्त कर सकता है। Program Control को जहां भी ये नाम मिलता है, Program Control सीधे ही इस volume() Method में आता है और volume() Method के Statements का Execution कर देता है। जिससे Box Object का Volume प्राप्त हो जाता है।

  • Method के Parameters या Arguments

कई बार जो Method किसी अन्‍य Class के Method को Call करता है, उस अन्‍य Method को कुछ मान प्रदान करता है। ये मान Call हो रहे Method के लिए Arguments या Parameters कहलाते हैं। चूंकि हमारे उदाहरण Program में main() Method volume Method को किसी प्रकार का कोई मान प्रदान नहीं कर रहा है, इसलिए हम चाहें तो Method के Argument List के स्थान पर void का प्रयोग कर सकते हैं या फिर Method के Parenthesis को Empty छोड सकते हैं।

इस Discussion के आधार पर हम हमारे volume Method को निम्नानुसार परिभाषित कर सकते हैं:

        public void volume(void)
        {

        }

        or

        public void volume()
        {

        }

अब हम उपरोक्त दोनों Statements को निम्नानुसार इस Method में लिख सकते हैं-

	public void volume()
	{
		volume = length * height * width;
		System.out.println("Volume is " + volume);
	}

चूंकि volume एक double प्रकार का Variable है, इसलिए हमें इस Method में एक Statement द्वारा इस Variable को Declare करना होगा। ये काम हमने main() Method में निम्नानुसार किया था&

      double volume;

यही Statement हमें इस Method में भी निम्नानुसार Use करना होगा:

	public void volume()
	{
		double volume;
		volume = length * height * width;
		System.out.println("Volume is " + volume);
	}

ये एक सामान्‍य सा Method है जो किसी Box Object के Volume को Screen पर Print करने का काम करता है। लेकिन Java में कोई भी Method स्वतंत्र रूप से Define नहीं किया जा सकता है, बल्कि हर Method को जिस Class के Object के लिए Define करना होता है, उसी Class में Define किया जाता है। इसलिए हमें इस Method को Box Class में Define करना होगा। ये काम हम निम्नानुसार Box Class में Modification करके कर सकते हैं:

// Box Class
	class Box
	{
		//Attributes
			double width;
			double height;
			double length;
		
		//Methods
		public void volume()
		{
			double volume;
			volume = length * height * width;
			System.out.println("Volume is " + volume);
		}
	}

जिस तरह से हमने Box Class के Data को Access करने के लिए Dot Operator का प्रयोग किया था, उसी तरह से हम इस Box Class के volume() Method को भी Dot Operator द्वारा Access कर सकते हैं। इसे समझने के लिए हम निम्नानुसार एक Program Develop कर सकते हैं:

// Program
	class Box
	{
		//Attributes
			double width;
			double height;
			double length;
		
		//Methods
		public void volume()
		{
			double volume;
			volume = length * height * width;
			System.out.println("Volume is " + volume);
		}
	}
	 
	public class BoxVolume
	{
		public static void main(String args[])
		{
			Box cpuCabinet = new Box();
			Box hardDisk = new Box();
			
			cpuCabinet.length = 100;
			cpuCabinet.height = 70;
			cpuCabinet.width = 20;
			
			hardDisk.length = 10;
			hardDisk.height = 1.5;
			hardDisk.width = 6;
	
			cpuCabinet.volume();
			hardDisk.volume();
		}
	}

// Output 
   Volume is 140000.0
   Volume is 90.0

इस Program की केवल अन्तिम दो Lines ऐसी हैं, जिन्हें समझना जरूरी है। cpuCabinet व hardDisk दो Box प्रकार के Objects हैं, जिनका Volume Calculate करना है। चूंकि ये दोनों Objects जिस Class के हैं उस Class में ही volume() Method को Define किया गया है और ये Method Box Class के Data पर ही प्रक्रिया करता है, इसलिए इन्हें Box Class के किसी भी Object के लिए Call किया जा सकता है।

जब Program Control cpuCabinet.volume() Statement पर आता है, तो यहां से Program Control सीधे ही Box Class में Define किए गए volume() Method में जाता है। उस Method में cpuCabinet Object के Data पर Operation Perform होता है और cpuCabinet Object का Volume Calculate होता है।

ये Volume Screen पर Print होने के बाद Program Control वापस अगले Statement hardDisk.volume() पर आता है। फिर से Box Class का volume() Method hardDisk Box Object के लिए Call होता है और Box Object का Volume Calculate हो कर Screen पर Print होता है।

हमने पहले भी कहा है कि किसी Class के जितने भी Object Create किए जाते हैं, उन सभी Objects के अपने स्वयं के Data होते हैं। जैसे cpuCabinet Object के स्वयं के Data cpuCabinet के Actual Memory Location पर Store होता है और hardDisk Object के स्वयं के Data hardDisk Actual Memory Location पर Store होते हैं।

इसलिए जब volume() Method को cpuCabinet Object के लिए Call किया जाता है, तब Program Control cpuCabinet Object के Data के आधार पर  cpuCabinet का Volume Calculate करता है और जब hardDisk Object के लिए इस Method को Call किया जाता है, तब Program Control hardDisk Object के Data के आधार पर Object के Volume को Calculate करता है।

इस Program मे हम देख सकते हैं कि volume() Method ना ही main() Method से Argument के रूप में कोई मान प्राप्त कर रहा है और ना ही main() Method को किसी प्रकार का मान Return कर रहा है, इसलिए इस प्रकार के Method को “Method without Argument and without Return Value” कहते हैं।

यदि हम चाहें तो इस नई Box Class के volume() Method को Return Value वाले Method में Convert कर सकते हैं। मानलो कि किसी Box Object के Volume का Calculation तो Class के volume() Method में होता है, लेकिन volume के मान को main() Method में ही Screen पर Print करना है।

तो इस स्थिति में हमें वे Statements जो कि volume() Method में Volume को Screen पर Print करने का काम करते हैं, उन्हें volume() Method से हटाना होगा और Volume के मान को volume() Method से Calling Method main() को Return करना होगा।

चूंकि volume एक double प्रकार का मान है इसलिए इस स्थिति में volume() Method को निम्नानुसार Declare करना होगा:

	public double volume()
	{
		double volume;
		volume = length * height * width;
		return volume;
	}

इस प्रकार के Method को “Method with no Argument but Return Value” Method कहा जाता है। यदि हम इस Method को पिछले Program द्वारा ही Use करना चाहें, तो निम्नानुसार Program द्वारा इसे Use कर सकते हैं:

// Program
	class Box
	{
		//Attributes
			double width;
			double height;
			double length;
		
		//Methods
		public double volume()
		{
			double volume;
			volume = length * height * width;
			return volume;
		}
	}
	 
	public class BoxVolumeWithReturnValue
	{
		public static void main(String args[])
		{
			Box cpuCabinet = new Box();
			Box hardDisk = new Box();
			
			double volumeCPUCabinet;
			double volumeHardDisk;
			
			cpuCabinet.length = 100;
			cpuCabinet.height = 70;
			cpuCabinet.width = 20;
			
			hardDisk.length = 10;
			hardDisk.height = 1.5;
			hardDisk.width = 6;
	
			volumeCPUCabinet = cpuCabinet.volume();
			System.out.println("Volume of CPU Cabinet is " + volumeCPUCabinet);
	
			volumeHardDisk = hardDisk.volume();
			System.out.println("Volume of Hard Disk is " + volumeHardDisk);
		}
	}

// Output 
   Volume of CPU Cabinet is 140000.0
   Volume of Hard Disk is 90.0

इस Program में सबसे ज्यादा महत्वपूर्ण Statement दो ही हैं, जिन्हें Bold किया गया है। जब cpuCabinet Object के लिए Class के volume() Method को Call किया जाता है, तब Program Control Class के Volume() Method में जाता है और cpuCabinet का Volume Calculate करता है। लेकिन इस Volume के मान को Print नहीं करताए बल्कि उस main() Method को Return कर देता है। इस Return किए गए मान को volumeCPUCabinet जो कि एक double प्रकार का Variable है, प्राप्त कर लेता है, जिसे अगले Println() Method द्वारा Screen पर Print कर दिया जाता है।

इसी तरह से hardDisk Box Object के लिए भी volume() Method Call होता है, जो hardDisk Box Object के Volume को Calculate करता है। इस Calculated Volume के मान को volume() Method main() Method को Return कर देता है, जिसे volumeHardDisk नाम का main() Method में Declare किया गया double प्रकार का Variable प्राप्त कर लेता है। अगले Statement में इस Variable में Stored मान को Screen पर Print करवा दिया जाता है।

पिछले Program में हम देख सकते हैं कि Box Class के volume() Method के Return Type को double प्रकार का Declare किया गया है और साथ ही इससे जो मान return Statement द्वारा Return किया जा रहा है, वह भी double प्रकार का है। main() Method में भी Box Class के जिन भी Objects का Volume Calculate करना है, उन सभी के Volume के मान को प्राप्त करने के लिए double प्रकार के Variable का ही प्रयोग किया गया है। यानी सभी स्थानों पर double प्रकार के Variables ही Declare किए गए हैं।

ऐसा इसलिए किया जाता है, क्योंकि Java का Compiler Type Compatibility के प्रति अत्‍यधिक संवेदनशील है। यदि हम इन तीनों स्थानों में से किसी भी स्थान पर double के स्थान पर किसी भी अन्‍य Data Type का प्रयोग करते हैं, तो Compiler हमें एक Compile Time Error प्रदान करता है और Program को Compile नहीं होने देता। इसलिए जब किसी Method से कोई मान Return करवाया जा रहा हो, तब इस बात का विशेष ध्‍यान रखना जरूरी होता है।

चलिए, अब एक उदाहरण देखते हैं जिसमें किसी Method में Parameters Pass किए जा रहे हैं। मानलो कि हमें दो संख्‍याओं को जोडने के लिए एक Method Create करना है। चूंकि हम चाहते हैं कि ये दोनों संख्‍याएं Program में add() Method में Argument के रूप में प्रदान करना चाहते हैं, इस स्थिति में add() Method को निम्नानुसार Declare करना होगा:

	public void add(int firstValue, int secondValue)
	{
		int result;
		result = firstValue + secondValue;
		System.out.println(“Total is “ + result);
	}

इस Method में जिन दो संख्‍याओं को जोडना होता है, उन्हें Argument के रूप में Method में Pass कर दिया जाता है। यदि हम इस Method को किसी main() Method में Use करना चाहें तो निम्नानुसार Code द्वारा Use कर सकते हैं हालांकि हम जावा में Practically ऐसा नहीं कर सकते हैं:

      add(12, 30);

ये Statement हमें निम्न Output प्रदान करता है-

      Total is 42

जब किसी Calling Method में add Method को Call किया जाता है और उदाहरण स्वरूप उसमें (12, 30) मान प्रदान किया जाता है, तब मान 12 add() Method के firstValue नाम के Variable में Store हो जाता है और मान 30 add() Method के दूसरे Argument secondValue में Store हो जाता है। यदि हम इन मानों को Change भी कर दें तो भी add() Method में कोई परिवर्तन करने की जरूरत नहीं होती है।

मानलो कि हम add(40, 20) Statement को Use करते हैं, तो मान 40 add() Method के firstValue Variable में Store हो जाता है और मान 20 add() Method के secondValue Argument में Store हो जाता है। फिर add() Method इन दोनों मानों को जोडकर Result को Output में Print कर देता है।

चूंकि हमने Parameter के रूप में Integer प्रकार के Data Type का Variable Declare किया है, इसलिए यदि इस Method में किसी अन्‍य Data Type का मान Argument के रूप में Pass किया जाए, तो Program Error Generate करता है। मानलो कि हमें 12.5 को 20 से जोडना है, तो हम निम्नानुसार add() Method द्वारा ये काम नहीं कर सकते हैं:

      add(12.5, 20);

क्योंकि add() Method में जो पहला मान firstValue Variable में Store होने के लिए Pass किया जाएगा, वह double प्रकार का मान है, जबकि firstValue Variable Integer प्रकार का है। ऐसे में double प्रकार का मान Integer प्रकार के Variable में Store नहीं हो सकता। यानी हम इस प्रकार से add() Method को Use नहीं कर सकते हैं। यदि हमें इस प्रकार के मान को जोडना हो तो हमें निम्नानुसार add() Method का एक दूसरा Version बनाना होगा-%

	public add volume(double firstValue, int secondValue)
	{
		double result;
		result = firstValue + secondValue;
		System.out.println(“Total is “ + result);
	}

अब हम उपरोक्त Statement द्वारा add() Method को Call कर सकते हैं। Arguments व Parameters में अन्तर होता है। हमने add() Method में जो firstValue व secondValue नाम के Variables Declare किए हैं, इन्हें Parameters कहते हैं। Parameters किसी मान को Store करने का काम करते हैं और add() Method को Call करते समय जो मान हमने कोष्‍ठक में प्रदान किया है, जैसे (12, 30) आदि] तो इन मानों को Argument कहते हैं। उपरोक्त दोनों Methods “Method with Argument but no Return Value” के उदाहरण हैं।

मानलो कि main() Method में Box Class का Object Create करने के बाद हम Object के Dimension को भी Define करना चाहते हैं। इस काम को करने के लिए हम निम्नानुसार एक setDimension() Method Create कर सकते हैं:

	public void setDimension(double len, double wid, double hei )
	{
		length = len;
		width = wid;
		height = hei;
	}

इस Method को भी यदि हम Box Class के Member Method के रूप में ले लें, तो इस Method का प्रयोग करके हम Box Class के किसी भी Object को Initialize कर सकते हैं। इसे समझने के लिए निम्न Program देखिए:

// Program
	class Box
	{
		//Attributes
			double width;
			double height;
			double length;
		
		//Methods
		public double volume()
		{
			double volume;
			volume = length * height * width;
			return volume;
		}
		
		public void setDimension(double len, double wid, double hei)
		{
			width = wid;
			length = len;
			height = hei;
		}
	}
	
	public class BoxDimension
	{
		public static void main(String args[])
		{
			Box cpuCabinet = new Box();
			Box hardDisk = new Box();
			
			double volumeCPUCabinet;
			double volumeHardDisk;
			
			cpuCabinet.setDimension(20, 30, 40);
			hardDisk.setDimension(21,12,3);
			
			volumeCPUCabinet = cpuCabinet.volume();
			System.out.println("Volume of CPU Cabinet is " + volumeCPUCabinet);
	
			volumeHardDisk = hardDisk.volume();
			System.out.println("Volume of Hard Disk is " + volumeHardDisk);
		}
	}

// Output 
   Volume of CPU Cabinet is 24000.0
   Volume of Hard Disk is 756.0

इस Program में भी दो Lines ही सबसे ज्यादा महत्वपूर्ण हैं जिन्हें Program में Bold किया गया है। जब cpuCabinet के लिए setDimension Method को Call किया जाता है और Method के Parenthesis में (20, 30, 40) मान प्रदान किया जाता है, तब ये मान क्रमश: len, wid व hei नाम के तीन Variables को प्राप्त हो जाता है। फिर इन मानों को Class के तीनों Instance Variables यानी length, width व height को Assign कर दिया जाता है। इस प्रकार से Box Object के तीनों Variables को main() Method से प्रदान किए जाने वाले Arguments द्वारा Initialize किया जा सकता है।

चलिए, हम Volume Method में निम्नानुसार परिवर्तन करके एक “Method with Argument and Return Value” प्रकार का Method Create करते हैं, जो कि निम्नानुसार है:

	public double volume(Box temp)
	{
		double volume;
		volume = temp.length * temp.height * temp.width;
		return volume;
	}

जिस तरह से हम किसी Basic प्रकार के Variable को किसी Method में Argument के रूप में Pass कर सकते हैं, उसी तरह से हम किसी Class के Object को भी किसी Method में Argument के रूप में Pass कर सकते हैं। इस प्रक्रिया को निम्न Program द्वारा समझाया गया है:

// Program
	class Box
	{
		//Attributes
			double width;
			double height;
			double length;
				
		//Methods
		public double volume(Box temp)
		{
			double volume;
			volume = temp.length * temp.height * temp.width;
			return volume;
		}
				
		public void setDimension(double len, double wid, double hei)
		{
			width = wid;
			length = len;
			height = hei;
		}
	}
	
	public class BoxVolumeWithBoxObjectArgument
	{
		public static void main(String args[])
		{
			Box cpuCabinet = new Box();
			Box hardDisk = new Box();
			
			double volumeCPUCabinet;
			double volumeHardDisk;
			
			cpuCabinet.setDimension(20, 30, 40);
			hardDisk.setDimension(21,12,3);
			
			volumeCPUCabinet = cpuCabinet.volume(cpuCabinet);
			System.out.println("Volume of CPU Cabinet is " + volumeCPUCabinet);
			
			volumeHardDisk = hardDisk.volume(hardDisk);
			System.out.println("Volume of Hard Disk is " + volumeHardDisk);
		}
	}

// Output 
   Volume of CPU Cabinet is 24000.0
   Volume of Hard Disk is 756.0

इस Program में जिस Object के लिए volume() Method को Call किया जाता है उसी Object को एक Argument के रूप में volume() Method में भेज दिया जाता है। volume() Method में उस Object के सभी मान एक temp नाम के Temporary Object में Store हो जाते हैं। फिर Dot Operator के प्रयोग द्वारा हम उस Object के विभिन्न Data Members को Access करके Object का Volume ज्ञात कर लेते हैं और Volume() को Calling Method main() में Return कर देते हैं।

Java Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

Java Programming Language in Hindi | Page: 682 | Format: PDF

BUY NOW GET DEMO REVIEWS