OOP میں ایبسٹریکشن (Abstraction): پیچیدگی کو چھپانا

آپ پیڈل دبا کر اور اسٹیرنگ گھما کر گاڑی چلاتے ہیں۔ آپ کو فیول انجکشن یا پسٹن کی حرکت کو سمجھنے کی ضرورت نہیں ہوتی۔ گاڑی یہ تمام تفصیلات آپ سے چھپا لیتی ہے۔ آپ صرف ایک سادہ انٹرفیس (interface) استعمال کرتے ہیں۔

سافٹ ویئر بھی اسی طرح کام کرتا ہے۔

ای میل بھیجنے کے بارے میں سوچیں۔ آپ کا کوڈ غالباً ایسا نظر آتا ہے:

emailService.send(email);

یہ سادہ نظر آتا ہے۔ لیکن پسِ پردہ، سسٹم بہت سے کام انجام دیتا ہے:

آپ کو ان مراحل کو دیکھنے کی ضرورت نہیں ہے۔ آپ کو صرف اس بات سے مطلب ہے کہ ای میل چلی جائے۔

اگر آپ ہر مرحلے کو ظاہر کر دیں گے، تو آپ مسائل پیدا کریں گے۔ تصور کریں کہ اگر ہر ڈویلپر کو دستی طور پر یہ کال کرنا پڑے:

یہ آپ کے کوڈ کو کمزور (fragile) بنا دیتا ہے۔ اگر آپ اپنا ای میل فراہم کنندہ (provider) تبدیل کرتے ہیں، تو آپ کو اپنی ایپ میں ہر جگہ اسے اپ ڈیٹ کرنا پڑے گا۔ آپ کا کوڈ براہِ راست امپلیمنٹیشن (implementation) سے جڑ جائے گا (tightly coupled ہو جائے گا)۔

ایبسٹریکشن اس مسئلے کو حل کرتی ہے۔

ایبسٹریکشن یہ ظاہر کرتی ہے کہ ایک آبجیکٹ کیا کرتا ہے۔ یہ اس بات کو چھپا دیتی ہے کہ وہ اسے کیسے کرتا ہے۔ آپ صارف کو صرف وہی دکھاتے ہیں جس کی انہیں ضرورت ہوتی ہے۔

صارف ایک مستحکم انٹرفیس کے ساتھ کام کرتا ہے۔ انہیں آپ کے آتھنٹیکیشن لاجک (authentication logic) یا آپ کی ری ٹرائی اسٹریٹجی (retry strategy) سے کوئی سروکار نہیں ہوتا۔ وہ تفصیلات چھپی رہتی ہیں۔

بہت سے لوگ ایبسٹریکشن کو انکیپسولیشن (Encapsulation) کے ساتھ خلط ملط کر دیتے ہیں۔ ان کے درمیان فرق یہ ہے:

انکیپسولیشن پوچھتا ہے: اس آبجیکٹ کی حالت (state) کو کون تبدیل کر سکتا ہے؟ یہ ڈیٹا کی حفاظت کرتا ہے۔

ایبسٹریکشن پوچھتا ہے: صارف کو کون سی تفصیلات نظر آنی چاہئیں؟ یہ پیچیدگی کو چھپاتا ہے۔

یہ بہتر سسٹمز بنانے کے لیے مل کر کام کرتے ہیں۔

اگلے مرحلے میں، ہم انہیریٹنس (Inheritance) پر بات کریں گے۔ ہم دیکھیں گے کہ ایک ہی کوڈ کو بار بار لکھے بغیر مشترکہ رویوں (shared behavior) کو کیسے سنبھالا جائے۔

ماخذ: https://dev.to/ashay_tiwari_3658168ad5db/abstraction-in-oop-hiding-complexity-without-hiding-capability-1111