Code Reusability

Code Reusability: हमने पिछले अध्‍यायों में Stack Class के बारे में काफी चर्चा की है। यहां हम एक Stack Class को Reuse करने में Inheritance की भूमिका पर विचार करेंगे। यहां हम Stack Class का Modified Program बना रहे हैं जिससे हम ये समझेंगे कि किस प्रकार से एक Class को Inheritance के कारण Reuse कर सकते हैं।

हमने पिछले अध्‍यायों में बनाए गए Stack Class के Programs में देखा है कि यदि Stack की Limit से अधिक Items को भी Stack में Push कर दिया जाए या बहुत सारे Items को Stack से Pop कर दिया जाए, तो भी Program हमें कोई Error नहीं देता है। इस समस्या के समाधान के लिए हम Stack Class से नई Class Derive कर रहे हैं और उसमें Stack Class को Reuse करते हुए उसमें ये Modification कर रहे हैं कि यदि Stack में Limit से अधिक Data Items को Push कर दिया जाए, तो Program Overflow का Error Message देता है इसी तरह से यदि Stack में कोई Item ना हो और किसी Item को Pop किया जाए, तो Program Underflow को Error Message प्रदान करता है।

मानलो कि किसी Company के विभिन्न Programmers ने मिलकर एक Original Stack Class को Develop किया। उन्होंने Class को Develop व Debug करने में काफी समय व पैसा खर्च किया और अब Class इस स्थिति में है कि उसे एक विश्‍वसनीय Programming Component के रूप में Use किया जा सकता है। बाद में एक दूसरी Company ने इस Stack Class की Library को पहली वाली Company से खरीदा। वह Company पहली Company की Class से सन्तुष्‍ट तो है लेकिन Company ने जब उस Stack Class को उपयोग में लिया तो उसे पता चला कि उसे अधिक बेहतर Error Protection की जरूरत है। इस दूसरी Company के Programmers ने इस पुरानी Stack Class को एक नई Class में Derive किया और बिना किसी प्रकार का परिवर्तन किए हुए उस Class के गुणों में Error Protection के नए Features को Add किया।

चूंकि उन्होंने पुरानी Stack Class में किसी प्रकार का कोई परिवर्तन नहीं किया है, इसलिए पुरानी Class के सभी Original Features अच्छी प्रकार से काम करते हैं। यानी केवल नई Class में जो नए Error Protection Features Add किए गए हैं, उन्हीं को उस दूसरी Company के Programmers को Debug करना है। यानी पहले से बनी हुई Class में बिना किसी प्रकार का परिवर्तन किए हुए उसमें Inheritance के Concept के आधार पर नए Features को Add करके पुरानी Class को Reuse कर लिया गया है।

इसी तरह से “C++” में हम पहले से बनी हुई Classes को Use कर सकते हैं और बिना किसी विशेष परिश्रम के Inheritance Concept के आधार पर पुरानी Class के Features को नई Class में Inherit करके उस नई Class में आवश्‍यकतानुसार नए Features को Add कर सकते हैं। यानी किसी पहले से बनी हुई Class को आसानी से Reuse कर सकते हैं।

Real World Situations में हमें कई Files के साथ Dealing करनी पडती है, लेकिन सरलता से समझने के लिए हम Source File व विभिन्न Class File को एक ही Program File में Use कर रहे हैं। चलिए, निम्न Program के आधार पर हम C++ के Code Reusability Concept को समझने की कोशिश करते हैं:

// Improved Stack Created using inheritance
#include <iostream.h>
#include <process.h>            	// for exit()
#include <conio.h>
class Stack                     	// a Stack holds up to SIZE ints
{
	protected:
		enum {SIZE=20};           	// capacity of Stack
		int st[SIZE];             	// integers are stored in array
		int top;                  	// index of last item Pushed

	public:
		Stack()                   	// no-arg Constructor
		{
			top = -1; 
		}

		void Push(int var)        	// place an item on the Stack
		{
			st[++top] = var; 
		}

		int Pop()                 	// remove an item from the Stack
		{
			return st[top--]; 
		}	
};

class Stack2 : public Stack
{
	public:
		void Push(int var)
		{
			if(top >= SIZE-1)
			{ 
				cout << "Error: Stack overflow"; 
				exit(-1); 
			}
      
			Stack::Push(var);      	// Call Push() in Stack Class
		}
   
		int Pop()
		{
			if(top<0)
			{
				cout << "Error: Stack underflow"; 
				exit(-1); 
			}

		return Stack::Pop();   	// Call Pop() in Stack Class
		}
};

void main()
{
	Stack2 s;                 	// Create a Stack2 Object
	s.Push(11);               	// Push 3 Items onto it
	s.Push(12);
	s.Push(13);
	cout << s.Pop() << endl;  	// Pop Items and display them
	cout << s.Pop() << endl;
	cout << s.Pop() << endl;
	cout << s.Pop() << endl;  	// oops, Popped one too many
	getch();
}

Stack2 Class में Stack2 का स्वयं का कोई Data Member नही है। इस Class का मुख्‍य काम Base Class के Pop() व Push() Functions को स्वयं के Improve Pop() व Push() Functions में Bind करना है। ये Improved Functions if Statement से शुरू होते हैं, जो ये Check करते हैं कि User कहीं बहुत अधिक Items को Push या Pop तो नहीं कर रहा है। फिर ये Base Stack Class के Pop व Push Functions को Actual Data Storage व Retrieval के लिए Call करते हैं।

किसी Class के Public Members Functions को Interface कहा जाता है, क्योंकि इन्हीं से Class को Use करने वाला Programmer Class के Data को Access करने के लिए Interaction करता है।  यदि किसी Class में एक भी Member Function Public Area में Declare व Define ना किए जाए, तो उस Class के Private Data को किसी भी तरीके से Access नहीं किया जा सकता है क्योंकि किसी Class के Private Data को केवल उसी Class के Public Member Functions द्वारा ही Access किया जा सकता है। इसलिए इन Public Member Functions को Interface कहा जाता है, जिनके द्वारा उस Class के Object में Data को Store करने व उस Class के Object के Data को Retrieve करने यानी Object के साथ Interaction करने का माध्‍यम प्राप्त होता है।

Main() Program में Program Stack2 Class का Object Create करता है और उसमें तीन item Push करता है। फिर Mistake से Class User चौथा Items इसमें से Pop करता है। जिससे Stack2 Class का एक Error Massage Return होता है जो Class User को बताता है कि उसने उस Item को Delete किया है, जो कि Stack में है ही नहीं। यानी Stack Empty है और उसमें से किसी Item को Pop नहीं किया जा सकता है। Program का Output निम्नानुसार प्राप्त होता है:

  13
  12
  11
  Error: Stack underflow

C++ Class Hierarchy
Protected Access Specifier

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

C++ Programming Language in Hindi | Page: 666 | Format: PDF

BUY NOW GET DEMO REVIEWS