سبق موروثیت (Inheritance)

محمداحمد

لائبریرین
موروثیت (Inheritance)

موروثیت (Inheritance) آبجیکٹ اورینٹڈ پروگرامنگ کا خاصہ ہے۔ جیسا کہ نام سے ہی ظاہرہے، موروثیت (Inheritance) کسی موجود کلاس کے خواص کی مدد سے کوئی نئی کلاس بنانے کا نام ہے۔ اسے عام زندگی کی مثال سے سمجھنے کی کوشش کرتے ہیں۔

ایک اداکار کے تعارف سے اخذ کردہ اقتباس پڑھیے۔

"وہ اپنے باپ کی طرح خوش شکل اور جاذبِ نظر ہے۔ اداکاری کے جوہر اسے اپنے باپ سے ملے ہیں۔ وراثتی خوبیوں کے ساتھ ساتھ وہ ایک اچھا گلوکار بھی ہے۔ "


اس اقتباس سے پتہ چلا کہ مذکورہ شخص ایک اداکار کا بیٹا ہے اور اسے وجاہت اور اداکاری کے جوہر ورثے میں ملے ہیں۔ یعنی یہ دو تو ہوئیں موروثی خوبیاں۔ ورثے میں ملنے والی خوبیوں کے علاوہ ایک خوبی اُس کی ذاتی ہے اور وہ یہ کہ وہ ایک اچھا گلوکار بھی ہے۔ اگر OOP کی نظر سے دیکھا جائے تو اس شخص کا باپ ایک بنیادی کلاس (Parent Class) ہے جس کی مدد سے مذکورہ شخص کی ذیلی کلاس (Child Class OR Sub Class ) بنائی گئی ہے جو اپنے باپ کی کچھ خوبیوں کا وارث ہے اور اس کی اپنی بھی کچھ مخصوص خوبیاں (Properties) ہیں۔

یعنی موروثیت (Inheritance) کے تحت ہم ایک نئی کلاس بناسکتے ہیں جو کسی بنیادی کلاس کے خواص کی حامل ہونے کے ساتھ ساتھ کچھ انفرادی خوبیاں (Properties) بھی رکھتی ہو۔ اصطلاحاً بنیادی کلاس Parent Class کہلائے گی جبکہ بنیادی کلاس سے ماخوذ ذیلی کلاس Child Class کہلائے گی۔
*****
چلیے ہم اپنی pet والی کلاس کو بنیاد بناتے ہوئے ایک ذیلی کلاس (sub class / child class) بناتے ہیں۔ ہماری pet والی کلاس ایک عمومی کلاس ہے جو عمومی گھریلو جانور کے متعلق معلومات رکھتی ہے۔ اس کو بنیاد بناتے ہوئے ہم ایک ذیلی کلاس dog بناتے ہیں۔
PHP:
class pet:
    number_of_legs = 0
 
    def sleep(self):
        print ("zzz")
 
    def count_legs(self):
        print ("I have %s legs" % self.number_of_legs)
 
class dog(pet):
    def bark(self):
        print ("Woof")

درج بالا کوڈ میں ہم نے ایک نئی کلاس dog کے نام سے وضع کی ہے۔ بغور دیکھا جائے تو یہ کلاس جو کہ ایک ذیلی کلاس (Child Class)ہے بنیادی کلاس (Parent Class) سے ذرا سی مختلف ہے۔ بنیادی کلاس (Parent Class) میں ہم کلاس کے نام کے بعد براہِ راست کولن ( : ) لگا دیتے ہیں جبکہ ذیلی کلاس میں کلاس کے نام اورکولن ( : ) کے مابین قوسین (Parenthesis) میں بنیادی کلاس (Parent Class) کا نام دیا جاتا ہے۔ جیسے ہماری ذیلی کلاس dog کو وضع کرتے وقت قوسین میں بنیادی کلاس کا نام pet دیا گیا ہے۔

نئی ذیلی کلاس میں ایک نیا قاعدہ (method)۔ "bark" متعارف کرایا گیا ہے جو کہ صرف dog کی کلاس کے لئے مخصوص ہے۔ اب ہم اپنی اس نئی کلاس کا ایک نیا مفعول (Object / Instance) بنا کر bark کے قاعدے (method) کو کال کرتے ہیں۔

PHP:
>>> tony = dog()
>>> tony.bark()
Woof
>>>

ہم دیکھ سکتے ہیں کہ bark کے قاعدے (method) کو کال کرنے سے متوقع نتائج میسر آئے۔ اب یہ دیکھنے کے لئے کہ موروثیت (Inheritance) کے تحت بنیادی کلاس (Parent Class) کے قواعد (methods) بھی ہماری نئی کلاس کو دستیاب ہیں یا نہیں۔ ہم مفعول (Object) کے ساتھ کچھ ایسے قواعد (methods) کو کال کرتے ہیں جو بنیادی کلاس (Parent Class) میں موجود ہیں۔
PHP:
>>> czor = dog()
>>> czor.number_of_legs = 4
>>>
>>> czor.bark()
Woof
>>> czor.sleep()
zzz
>>> czor.count_legs()
I have 4 legs
>>>

آپ دیکھ سکتے ہیں کہ ذیلی کلاس پر بنائی گئی مثال (instance / object) کو بنیادی (Parent) اور ذیلی (Child) دونوں کلاسز کے قواعد (methods) اور متغیرات (variables) تک رسائی حاصل ہے۔

اسی طریقے سے ہم کلاس pet کی کئی ایک ذیلی کلاسز مثلاً Fish, Bird، Rabit وغیرہ بنا سکتے ہیں جو عمومی کلاس کے خواص کے علاوہ مخصوص جانوروں کے مخصوص خواص کی معلومات جمع کرنے کا کام کر سکتی ہیں۔

موروثیت (Inheritance) کوڈ کو عمومی بنانے میں مدد دیتی ہے اور اس طرح ہم کوڈ کی غیر ضروری تکرار سے بچے رہتے ہیں۔ کلاس کے عمومی خواص میں اگر کسی تدوین کی ضرورت ہو تو صرف بنیادی کلاس میں تدوین کرنے سے ہمارا مسئلہ حل ہو جاتا ہے اور ہم غیر ضروری کام سے بچ جاتے ہیں۔
 
Top