وراثت اور پولیمورفزم کے مابین فرق

مصنف: Laura McKinney
تخلیق کی تاریخ: 1 اپریل 2021
تازہ کاری کی تاریخ: 5 مئی 2024
Anonim
کولمبیا یونیورسٹی - ذاتی جینوموں پر ڈیٹا سائنس
ویڈیو: کولمبیا یونیورسٹی - ذاتی جینوموں پر ڈیٹا سائنس

مواد


وراثت کی اجازت دیتا ہے ، کوڈ کا دوبارہ استعمال اور پولیمورفزم ، مختلف شکلوں کے ساتھ ایک فنکشن کا موجود ہونا۔ وراثت اور پولیمورفزم کے مابین بنیادی فرق یہ ہے کہ وراثت پہلے سے موجود کوڈ کو ایک پروگرام میں دوبارہ سے استعمال کرنے کی اجازت دیتا ہے ، اور پولیمورزم ایک ایسا طریقہ کار مہیا کرتا ہے جو متحرک طور پر یہ طے کرسکتا ہے کہ کسی فعل کی کس شکل کو طلب کیا جائے۔

  1. موازنہ چارٹ
  2. تعریف
  3. کلیدی اختلافات
  4. نتیجہ اخذ کرنا

موازنہ چارٹ

موازنہ کی بنیادوراثتپولیمورفزم
بنیادیوراثت پہلے سے موجود کلاس کی خصوصیات کو استعمال کرکے ایک نئی کلاس تشکیل دے رہی ہے۔پولیمورفزم بنیادی طور پر متعدد شکلوں کا ایک مشترکہ انٹرفیس ہے۔
عمل آوریوراثت بنیادی طور پر کلاسوں پر لاگو ہوتی ہے۔پولیمورفزم بنیادی طور پر فنکشن / طریقوں پر لاگو ہوتا ہے۔
استعمال کریںOOP میں دوبارہ پریوستیت کے تصور کی تائید کرنا اور کوڈ کی لمبائی کو کم کرنا۔اعتراض کو یہ فیصلہ کرنے کی اجازت دیتا ہے کہ جب مرتب وقت (اوورلوڈنگ) کے ساتھ ساتھ رن ٹائم (اوور رائیڈنگ) کے ساتھ فنکشن کی کون سی شکل کو طلب کیا جائے۔
فارموراثت ایک واحد وراثت ، متعدد وراثت ، کثیر الثانی ورثہ ، درجہ بندی وراثت اور ہائبرڈ وراثت ہوسکتی ہے۔پولیمورفزم ایک مرتب وقت پالیمورفزم (اوورلوڈنگ) یا رن ٹائم پولیمورفزم (اوور رائیڈنگ) ہوسکتا ہے۔
مثالکلاس ٹیبل کلاس فرنیچر کی خصوصیت کا وارث ہوسکتی ہے ، کیونکہ ایک میز فرنیچر ہوتا ہے۔کلاس اسٹڈی_ٹیبل میں فنکشن سیٹ_کلر () بھی ہوسکتا ہے اور ڈائننگ_ٹیبل کی کلاس بھی فنکشن سیٹ_کالور () رکھ سکتی ہے ، لہذا ، سیٹ_کالور () کو کون سا شکل دینے کا فیصلہ کیا جاسکتا ہے ، دونوں کو مرتب وقت اور رن ٹائم سے متعلق کیا جاسکتا ہے؟


وراثت کی تعریف:

وراثت OOP کی ایک اہم خصوصیت ہے ، جو "دوبارہ پریوستیت" کی بھر پور حمایت کرتی ہے۔ موجودہ طبقے کی خصوصیات کو دوبارہ استعمال کر کے دوبارہ پریوستیت کو ایک نئی کلاس بنانے کے طور پر بیان کیا جاسکتا ہے۔ وراثت میں ، ایک بیس کلاس ہے ، جو اخذ کردہ کلاس سے وراثت میں ملتی ہے۔ جب کلاس کسی دوسرے طبقے کو ورثہ میں ملتا ہے تو ، بیس کلاس کا ممبر (حص s) اخذ کلاس کا ممبر (زبانیں) بن جاتا ہے۔

کلاس کو ورثہ دینے کی عمومی شکل مندرجہ ذیل ہے۔

کلاس سے ماخوذ کلاس-نام: رسائی کو متعین کرنے والا بیس کلاس نام {// کلاس کا باڈی}؛

یہاں ، تکثیری کرنے والا بیس کلاس میں موجود رکن (افراد) کو اخذ کلاس تک رسائی کا طریقہ (نجی ، عوامی ، محفوظ) فراہم کرتا ہے۔ اگر تکالیف کے مطابق کوئی قابل رسائی موجود نہیں ہے تو ، بطور ڈیفالٹ ، اسے "نجی" سمجھا جاتا ہے۔ سی ++ میں ، اگر اخذ کردہ کلاس "ڈھانچہ" ہے تو پھر تکالیف دہندہ بطور ڈیفالٹ "عوامی" ہوتا ہے۔

C ++ میں ، وراثت پانچ شکلوں میں حاصل کی جاسکتی ہے۔ ان کی درجہ بندی اس طرح کی جاسکتی ہے: -


  • سنگل وراثت (صرف ایک سپر کلاس)
  • ایک سے زیادہ ورثہ (متعدد سپرکلاس)
  • درجہ بندی کا وارث (ایک سپر کلاس ، بہت سے ذیلی طبقات)
  • متعدد وراثت (ماخوذ طبقے سے ماخوذ)

جاوا میں ، کلاس "توسیع" کے لفظ کو استعمال کرکے کلاس دوسرے طبقے کو ورثہ میں ملتی ہے۔ جاوا میں ، بیس کلاس کو ایک سپر کلاس کہا جاتا ہے ، اور اخذ کلاس کو سب کلاس کہا جاتا ہے۔ ایک ذیلی طبقے بیس کلاس کے ان ممبروں تک رسائی حاصل نہیں کرسکتے ہیں ، جنہیں "نجی" قرار دیا جاتا ہے۔ جاوا میں کلاس کو وراثت میں ملنے والی عمومی شکل مندرجہ ذیل ہے۔

کلاس سے ماخوذ طبقاتی نام بیس کلاس-نام s // کلاس کا باڈی extend؛

جاوا متعدد وراثت کی وراثت کی حمایت نہیں کرتا ہے ، جبکہ یہ کثیر الجہتی درجہ بندی کی حمایت کرتا ہے۔ جاوا میں ، کبھی کبھی ایک سپر کلاس اپنی نفاذ کی تفصیلات چھپانا چاہتی ہے ، اور وہ اس ڈیٹا کا کچھ حصہ “نجی” بنا دیتا ہے۔ جیسا کہ جاوا میں ہے ، ایک ذیلی طبقے سپر کلاس کے نجی ممبروں تک رسائی حاصل نہیں کرسکتا ہے اور اگر کوئی ذیلی طبقہ ان ممبروں تک رسائی حاصل کرنا یا ان کی ابتدا کرنا چاہتا ہے تو جاوا ایک حل فراہم کرتا ہے۔ ذیلی طبقہ "سپر" کی ورڈ استعمال کرکے اپنے فوری سپر کلاس ممبروں کا حوالہ دے سکتا ہے۔ یاد رکھیں ، آپ صرف فوری سپر کلاس کے ممبروں تک رسائی حاصل کرسکتے ہیں۔

’’ سپر ‘‘ کی دو عمومی شکلیں ہیں۔ سب سے پہلے ، یہ سپر کلاس کے ڈھانچے کو کال کرنے کے لئے استعمال ہوتا ہے۔ دوسرا یہ ہے کہ ، سپر کلاس کے ممبر تک رسائی حاصل کرنا ہے جسے سب کلاسک کے ممبر نے چھپا دیا ہے۔

// کنسٹرکٹر کو کال کرنے کا پہلا فارم۔ کلاس supper_class {supper_class (argu__list) {..} // سپر کلاس کا تعمیر کنندہ}؛ کلاس ذیلی_کلاس میں ضمنی_کلاس s ذیلی_کلاس (دلیل_ فہرست) {..} // سب_کلاس سپر (دلیل_ فہرست) کا تعمیر کنندہ؛ // سب_کلاس نے سپر کلاس کے کنسٹرکٹر کو کال کیا} calls؛

// دوسرا سپر کلاس کے رات کا کھانا۔ } کلاس ذیلی_کلاس میں رات کا کھانا بڑھاتا ہے۔ sub_class (int a، int b). super.i = a؛ // i سپر کلاس i = b؛ // میں ذیلی کلاس}}؛

پولیمورفزم کی تعریف

پولیمورفزم کی اصطلاح کا سیدھا مطلب ہے ’ایک فنکشن ، ایک سے زیادہ شکلیں‘۔ پولیمورفزم دونوں مرتب وقت اور رن ٹائم پر حاصل کیا جاتا ہے۔ کمپائل ٹائم پولیمورفزم کو "اوورلوڈنگ" کے ذریعے حاصل کیا جاتا ہے جبکہ ، رن ٹائم پولیمورفزم کو "اوور رائیڈنگ" کے ذریعے حاصل کیا جاتا ہے۔

پولیمورفزم آبجیکٹ کو یہ فیصلہ کرنے کی اجازت دیتا ہے کہ "فنکشن کی کون سی شکل کو جب استعمال کرنا ہے" جب دونوں وقت مرتب کریں اور وقت چلائیں۔
آئیے اوورلوڈنگ کے پہلے تصور پر تبادلہ خیال کریں۔ اوورلوڈنگ میں ، ہم کلاس میں ایک فنکشن کو ایک سے زیادہ مرتبہ مختلف ، ڈیٹا ٹائپ اور پیرامیٹرز کی تعداد کے ساتھ متعین کرتے ہیں جبکہ اوورلوڈ ہونے والی فنکشن میں ایک ہی ریٹرن کی قسم ہونی چاہئے۔ زیادہ تر اوقات سے زیادہ کام افسران کلاس کے تعمیر کار ہوتے ہیں۔

کلاس اوورلوڈ {انٹ اے ، بی؛ عوامی: INT اوورلوڈ (int x) {// پہلا اوورلوڈ () کنسٹرکٹر a = x؛ واپس a؛ over INT اوورلوڈ (int x، int y) {// دوسرا اوورلوڈ () کنسٹرکٹر a = x؛ b = y؛ ایک * بی واپس؛ }}؛ INT مین () {اوورلوڈ O1؛ O1.overload (20)؛ // پہلے اوورلوڈ () کنسٹرکٹر کال O1.overload (20،40)؛ // دوسرا اوورلوڈ () کنسٹرکٹر کال}

اب ، پولیمورفزم کی دوسری شکل یعنی اوور رائیڈنگ پر بات کرتے ہیں۔ اوور رائیڈنگ کے تصور کو صرف کلاسوں کے فنکشن پر ہی لاگو کیا جاسکتا ہے جو وراثت کے تصور کو بھی نافذ کرتی ہے۔ سی ++ میں ، فنکشن کو اوور رائٹ کرنے سے پہلے بیس کلاس میں "ورچوئل" کی ورڈ سے پہلے بنایا گیا ہے اور مشتق کلاس میں اسی پروٹو ٹائپ کے ساتھ کلیدی لفظ "ورچوئل" کے علاوہ نئی تعریف دی گئی ہے۔

کلاس بیس {عوامی: ورچوئل باطل فنکٹ () base // بیس کلاس cout کا ورچوئل فنکشن << "یہ ایک بیس کلاسز فنکٹ ہے ()"؛ }}؛ کلاس اخذ شدہ 1: عوامی بنیاد {عوام: باطل فنکٹ () {// بیسک کلاس کا ورچوئل فنکشن ڈیریوڈ 1 کلاس cout میں دوبارہ متعین << "یہ ایک مشتق کلاسی فنکٹ () ہے؛ }}؛ انٹ مین مین () {بیس * پی ، بی؛ اخذ کردہ 1 d1؛ * پی = & بی؛ p-> فنکٹ ()؛ // بیس کلاس فنکٹ () پر کال کریں۔ * p = & d1؛ واپسی 0؛ }

  1. وراثت ایک کلاس تشکیل دے رہی ہے جو پہلے سے موجود کلاس سے اپنی خصوصیت اخذ کرتی ہے۔ دوسری طرف ، پولیمورزم ایک انٹرفیس ہے جس کی ایک سے زیادہ شکلوں میں تعریف کی جاسکتی ہے۔
  2. وراثت کو کلاسوں پر لاگو کیا جاتا ہے جبکہ ، متعدد طریقوں / افعال پر پولیمورفزم نافذ کیا جاتا ہے۔
  3. چونکہ وراثت سے مشتق طبقے کو بنیادی طبقے میں بیان کردہ عناصر اور طریقوں کو استعمال کرنے کی اجازت ملتی ہے ، لہذا ماخوذ طبقے کو ان عناصر یا اس کے طریقہ کار کو دوبارہ بیان کرنے کی ضرورت نہیں ہے ، لہذا ہم کہہ سکتے ہیں کہ اس سے کوڈ کی دوبارہ پریوستیت بڑھ جاتی ہے اور اسی وجہ سے ، کوڈ کی لمبائی کو کم کردیتا ہے . دوسری طرف ، کثیر المثالثیت کسی شے کے لئے یہ فیصلہ کرنا ممکن بناتی ہے کہ وہ مرتب وقت اور رن ٹائم دونوں طریقوں سے کس طریقے کا مطالبہ کرنا چاہتا ہے۔
  4. وراثت کو واحد وراثت ، متعدد وراثت ، کثیر الثانی ورثہ ، درجہ بندی وراثت اور ہائبرڈ وراثت کے طور پر درجہ بندی کیا جاسکتا ہے۔ دوسری طرف ، پولیمورفزم کو اوورلوڈنگ اور اوور رائیڈنگ کے زمرے میں رکھا گیا ہے۔

نتیجہ:

وراثت اور پولیمورفزم باہمی وابستہ تصورات ہیں ، کیوں کہ متحرک کثیرالمفسیق طبقوں پر لاگو ہوتا ہے جو وراثت کے تصور کو بھی نافذ کرتی ہے۔