Call super
کال سپر کچھ آبجیکٹ پر مبنی پروگرامنگ زبانوں کا کوڈ بو یا اینٹی پیٹرن ہے۔ کال سپر ایک ڈیزائن پیٹرن ہے جس میں ایک مخصوص کلاس یہ طے کرتی ہے کہ ایک مشتق ذیلی کلاس میں، صارف کو کسی طریقہ کو اوور رائیڈ کرنے اور کسی خاص مقام پر اوور رائیڈ فنکشن کو خود کال بیک کرنے کی ضرورت ہوتی ہے۔ اوور رائیڈن طریقہ جان بوجھ کر نامکمل ہو سکتا ہے، اور مقررہ طریقے سے اپنی فعالیت کو بڑھانے کے لیے اوور رائیڈنگ طریقہ پر انحصار کر سکتا ہے۔ تاہم، حقیقت یہ ہے کہ زبان خود اس کال پر مقرر کردہ تمام شرائط کو نافذ کرنے کے قابل نہیں ہوسکتی ہے جو اسے مخالف نمونہ بناتی ہے۔ آبجیکٹ پر مبنی پروگرامنگ میں، صارفین ذیلی کلاسوں میں سپر کلاس کی خصوصیات اور طرز عمل کو وراثت میں حاصل کر سکتے ہیں۔ ایک ذیلی زمرہ اپنے سپر کلاس کے طریقوں کو ختم کر سکتا ہے، اور سپر کلاس کے نفاذ کے لیے طریقہ کار کے اپنے نفاذ کو تبدیل کر سکتا ہے۔ بعض اوقات اوور رائیڈنگ طریقہ سپر کلاس میں متعلقہ فعالیت کو مکمل طور پر تبدیل کر دے گا، جبکہ دوسرے معاملات میں سپر کلاس کے طریقہ کو پھر بھی اوور رائیڈنگ طریقہ سے کال کیا جانا چاہیے۔ لہذا، زیادہ تر پروگرامنگ زبانوں کے لیے ضروری ہے کہ ایک اوور رائیڈنگ طریقہ کو عمل میں لانے کے لیے سپر کلاس پر واضح طور پر اوور رائیڈن طریقہ کو کال کرنا چاہیے۔ کال سپر اینٹی پیٹرن ایک مخصوص کلاس سے ذیلی کلاس حاصل کرنے کے لیے انٹرفیس یا فریم ورک کے صارفین پر انحصار کرتا ہے، ایک مخصوص طریقہ کو اوور رائڈ کرتا ہے اور اوور رائڈنگ طریقہ سے اصل طریقہ کو کال کرنے کے لیے اوور رائڈن طریقہ کی ضرورت ہوتی ہے: یہ اکثر ضروری ہوتا ہے، کیونکہ سپر کلاس کو کلاس یا فریم ورک کے لیے کچھ سیٹ اپ کام انجام دینے ہوتے ہیں تاکہ وہ صحیح طریقے سے کام کر سکے، یا چونکہ سپر کلاس کا بنیادی کام (جو اس طریقہ کے ذریعے انجام دیا جاتا ہے) صرف ذیلی کلاس کے ذریعے بڑھایا جاتا ہے۔ اینٹی پیٹرن والدین کو کال کرنے کا ہے۔ حقیقی کوڈ میں بہت سی مثالیں موجود ہیں جہاں ذیلی کلاس میں طریقہ اب بھی سپر کلاس کی فعالیت چاہتا ہے، عام طور پر جہاں یہ صرف بنیادی فعالیت کو بڑھا رہا ہے۔ اگر اسے اب بھی پیرنٹ کلاس کو کال کرنا ہے یہاں تک کہ اگر یہ فعالیت کو مکمل طور پر تبدیل کر رہا ہے، تو اینٹی پیٹرن موجود ہے۔ ان مسائل کو حل کرنے کا ایک بہتر طریقہ یہ ہے کہ ٹیمپلیٹ میتھڈ پیٹرن کا استعمال کیا جائے، جہاں سپر کلاس میں ایک خالص تجریدی طریقہ شامل ہوتا ہے جسے ذیلی کلاسوں کے ذریعہ نافذ کیا جانا چاہیے اور اس میں اصل طریقہ ہونا چاہیے جسے وہ طریقہ کہتے ہیں: زبان کی تغیر پروگراموں میں اس مخالف پیٹرن کی ظاہری شکل عام طور پر اس وجہ سے ہوتی ہے کہ چند پروگرامنگ زبانیں معاہدہ کے طور پر یہ یقینی بنانے کے لیے ایک خصوصیت فراہم کرتی ہیں کہ ایک سپر میتھڈ کو ماخوذ کلاس سے بلایا جائے۔ ایک زبان جس میں یہ خصوصیت ہے، کافی بنیادی انداز میں، بیٹا ہے۔ یہ خصوصیت مثال کے طور پر جاوا اور سی + + میں محدود طریقے سے پائی جاتی ہے، جہاں چائلڈ کلاس کنسٹرکٹر ہمیشہ پیرنٹ کلاس کنسٹرکٹر کو کال کرتا ہے۔ وہ زبانیں جو طریقوں سے پہلے اور بعد میں تعاون کرتی ہیں، جیسے کامن لیسپ (خاص طور پر کامن لیسپ آبجیکٹ سسٹم)، اس مخالف طرز سے بچنے کے لیے ایک مختلف طریقہ فراہم کرتی ہیں۔ سب کلاس کا پروگرامر، سپر کلاس کے طریقہ کو ختم کرنے کے بجائے، ایک اضافی طریقہ فراہم کر سکتا ہے جسے سپر کلاس کے طریقہ سے پہلے یا بعد میں انجام دیا جائے گا۔ نیز، سپر کلاس کا پروگرامر ذیلی کلاس کے اعمال کے علاوہ ان طریقوں سے پہلے، بعد اور آس پاس کی وضاحت کر سکتا ہے جن پر عمل درآمد کی ضمانت دی جاتی ہے۔ مثال کے طور پر فرض کریں کہ ویڈیو رینٹل اسٹور کی انوینٹری کے بارے میں رپورٹ تیار کرنے کے لیے ایک کلاس ہے۔ ہر مخصوص اسٹور میں فی الحال دستیاب ویڈیوز کو ٹیبل کرنے کا ایک مختلف طریقہ ہے، لیکن حتمی رپورٹ تیار کرنے کا الگورتھم تمام اسٹورز کے لیے یکساں ہے۔ ایک فریم ورک جو کال سپر اینٹی پیٹرن کا استعمال کرتا ہے وہ مندرجہ ذیل تجریدی کلاس فراہم کر سکتا ہے (C #میں): تجریدی کلاس رپورٹ جنریٹر {پبلک ورچوئل رپورٹ کریٹ رپورٹ () {// جنرل رپورٹ آبجیکٹ تیار کریں//۔ نئی رپورٹ واپس کریں (.) ؛} کلاس کے صارف سے توقع کی جاتی ہے کہ وہ اس طرح کے ذیلی طبقے کو نافذ کرے: کلاس کنکریٹ رپورٹ جنریٹر: رپورٹ جنریٹر {پبلک اوور رائیڈ رپورٹ کریٹ رپورٹ () اس کلاس کے ڈیزائن کے لیے پیرنٹ کریٹ رپورٹ () فنکشن کو اوور رائڈ فنکشن کے// آخر میں کال کرنے کی ضرورت ہوتی ہے۔ لیکن نوٹ کریں کہ اس لائن کو آسانی سے چھوڑا جا سکتا ہے، یا کال کے بعد// واپس کی گئی رپورٹ میں مزید ترمیم کی جا سکتی ہے، جس سے کلاس ڈیزائن// اور ممکنہ طور پر کمپنی بھر میں رپورٹ کی شکل کی بھی خلاف ورزی ہوتی ہے۔ واپسی base.CreateReport () ؛} ایک ترجیحی انٹرفیس اس طرح نظر آتا ہے: تجریدی کلاس رپورٹ جنریٹر {پبلک رپورٹ کریٹ رپورٹ () {ٹیبولیٹ () ؛// جنرل رپورٹ آبجیکٹ تیار کریں//۔ نئی رپورٹ واپس کریں (۔) ؛} محفوظ تجریدی کالعدم ٹیبولیٹ () ؛} ایک نفاذ اس کلاس کو اس طرح اوور رائیڈ کرے گا: کلاس کنکریٹ رپورٹ جنریٹر: رپورٹ جنریٹر {محفوظ کالعدم ٹیبولیٹ کو اوور رائیڈ کریں () {// اسٹور کے مخصوص طریقے میں ٹیبولیٹ ڈیٹا//} حوالہ جات اینٹی پیٹرن آبجیکٹ پر مبنی پروگرامنگ