ٹیوٹوریل

لِسکوف سبسٹیشن کا اصول ، تیسرا سولیڈ اصول

بچوں کی کلاسوں کو کبھی بھی اثر انداز یا ترمیم نہیں کرنا چاہئے۔ defiپیرنٹ کلاس کی قسم کے بیانات۔

اس اصول کا تصور باربرا لیسکوف نے 1987 کی کانفرنس کے کلیدی نوٹ میں متعارف کرایا اور بعد میں 1994 میں جینیٹ ونگ کے ساتھ مل کر ایک مقالے میں شائع کیا۔ defiاصل ٹیشن مندرجہ ذیل ہے:

آئیے Q (x) قسم T کی اشیاء x پر ایک قابل قابل جائیداد بنیں۔ پھر Q (y) S قسم کی آبجیکٹ y کے لئے نمایاں ہونا چاہئے جہاں S T کا ذیلی قسم ہے۔

بعد میں، اپنی کتاب Agile Software Development, Principles, Patterns, and Practices میں رابرٹ سی. مارٹن کے SOLID اصولوں کی اشاعت کے ساتھ اور پھر کتاب کے C# ورژن میں Agile Principles, Patterns, and Practices in C# میں دوبارہ شائع کیا گیا۔ defition کو Liskov متبادل اصول کے طور پر جانا جاتا ہے۔

یہ ہمیں لاتا ہے defiرابرٹ سی مارٹن کی طرف سے دی گئی معلومات: ذیلی قسمیں ان کی بنیادی اقسام کے ساتھ بدل پانے چاہ.۔

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

کلاس گاڑی {

    فنکشن اسٹارٹ انجین () {

        // ڈیفالٹ انجن اسٹارٹ فعالیت

    }

 

    تقریب میں تیزی () {

        // ڈیفالٹ ایکسلریشن فعالیت

    }

}

ایک گاڑی کی کلاس دی گئی ہے - یہ خلاصہ ہوسکتا ہے - اور دو نفاذ:

کلاس کار کی گاڑی میں توسیع {

    فنکشن اسٹارٹ انجین () {

        $ اس-> منگنی۔ ()؛

        والدین :: startEngine ()؛

    }

 

    نجی تقریب کی مصروفیت انجنشن () {

        // اگنیشن کا طریقہ کار

    }

}

 

کلاس الیکٹرک بس نے گاڑی میں توسیع {

    تقریب میں تیزی () {

        $ اس-> وولٹیج ()؛

        $ اس-> متصلہ انفرادی انجین ()؛

    }

 

    نجی تقریب میں اضافہ ولٹیج () {

        // الیکٹرک منطق

    }

 

    نجی تقریب سے منسلک

        // رابطہ منطق

    }

}

کلاس ڈرائیور {

    فنکشن گو (گاڑی $ v)

        $ v-> startEngine ()؛

        $ v-> ایکسلٹ ()؛

    }

}

اگر ایک کلائنٹ کلاس وہیکل استعمال کرسکتی ہے تو وہ دونوں استعمال کرنے کے قابل ہو۔

جو ہمیں او سی پی میں استعمال کرنے کے ساتھ سانچہ کے طریقہ کار ڈیزائن پیٹرن کے ایک سادہ عمل میں آجاتا ہے۔

آپ دوسرے ٹھوس اصول میں بھی دلچسپی لے سکتے ہیں: https://bloginnovazione.en/ open-closed-secend-solid-principle/3906/

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

ایل ایس پی کی خلاف ورزی کی مثال

کلاس مستطیل {

    نجی - اوپر بائیں؛

    نجی $ چوڑائی؛

    نجی $ اونچائی؛

 

    عوامی تقریب سیٹ (اونچائی) {

        $ this-> اونچائی = $ اونچائی؛

    }

 

انوویشن نیوز لیٹر
جدت پر سب سے اہم خبروں کو مت چھوڑیں۔ ای میل کے ذریعے انہیں وصول کرنے کے لیے سائن اپ کریں۔

    عوامی تقریب getHeight () {

        واپسی $ اس-> اونچائی؛

    }

 

    عوامی تقریب سیٹ چوڑائی ($ چوڑائی)

        $ اس-> چوڑائی = $ چوڑائی؛

    }

 

    عوامی تقریب getWidth () {

        واپسی $ اس-> چوڑائی؛

    }

}

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

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

کلاس اسکوائر مستطیل extend

    عوامی تقریب سیٹ ہائٹ ($ قدر) {

        $ اس-> چوڑائی = $ قدر؛

        $ this-> اونچائی = $ قدر؛

    }

 

    عوامی تقریب سیٹ وڈتھ ($ قدر) {

        $ اس-> چوڑائی = $ قدر؛

        $ this-> اونچائی = $ قدر؛

    }

}

ایک مربع برابر چوڑائی اور اونچائی والا ایک مستطیل ہے اور ہم پچھلی مثال کی طرح عجیب سا عمل درآمد کرسکتے ہیں۔ ہم دونوں سیٹٹرز کو اونچائی اور چوڑائی دونوں کو طے کرنے کے لئے اوور رائڈ کرسکتے ہیں۔ لیکن اس سے کلائنٹ کوڈ پر کیا اثر پڑے گا؟

کلاس کلائنٹ {

    فنکشن ایریاویریفر (مستطیل $ r) {

        $ r-> سیٹ وڈتھ (5)؛

        $ r-> سیٹ ہائٹ (4)؛

        اگر ($ r-> ایریا ()! = 20)

            نیا استثنا پھینک دیں ('خراب علاقہ!')؛

        }

        سچ واپس لو

    }

}

یہ سمجھا جاسکتا ہے کہ ایک مؤکل کی کلاس رکھی جائے جو مستطیل کے رقبے کی جانچ کرے اور اگر غلط ہو تو استثناء دے دے۔

فنکشن ایریا () {

    واپسی $ اس-> چوڑائی * $ اس-> اونچائی؛

}

ہم نے علاقہ فراہم کرنے کے لئے مذکورہ بالا طریقہ کار کو اپنے مستطیل طبقے میں شامل کیا ہے۔

کلاس LspTest میں توسیع PHPUnit_Framework_TestCase {

    فنکشن ٹیسٹالجلال آریہ () {

        $ r = نیا مستطیل ()؛

        $ c = نیا مؤکل ()؛

        $ this-> assertTrue ($ c-> ایریاویریفر ($ r))؛

    }

}

اور ہم نے ایریا چیکر کو ایک خالی مستطیل آبجیکٹ بھیج کر ایک سادہ ٹیسٹ بنایا اور ٹیسٹ پاس کیا۔ اگر ہماری کلاس اسکوائر ہے۔ defiصحیح طریقے سے nished، اسے کلائنٹ کے areaVerifier() پر بھیجنے سے اس کی فعالیت کو نہیں توڑنا چاہیے۔ سب کے بعد، ایک مربع ہر ریاضیاتی معنوں میں ایک مستطیل ہے. لیکن کیا یہ ہماری کلاس ہے؟

فنکشن ٹیسٹاسکیریا () {

    $ r = نیا اسکوائر ()؛

    $ c = نیا مؤکل ()؛

    $ this-> assertTrue ($ c-> ایریاویریفر ($ r))؛

}

لہذا، ہماری اسکوائر کلاس آخر کار مستطیل نہیں ہے۔ یہ جیومیٹری کے قوانین کو توڑتا ہے۔ یہ ناکام ہو جاتا ہے اور Liskov متبادل اصول کی خلاف ورزی کرتا ہے۔.

Ercole Palmeri

انوویشن نیوز لیٹر
جدت پر سب سے اہم خبروں کو مت چھوڑیں۔ ای میل کے ذریعے انہیں وصول کرنے کے لیے سائن اپ کریں۔

حالیہ مضامین

شاندار آئیڈیا: Bandalux Airpure® پیش کرتا ہے، وہ پردہ جو ہوا کو صاف کرتا ہے

مسلسل تکنیکی جدت اور ماحول اور لوگوں کی فلاح و بہبود کے عزم کا نتیجہ۔ Bandalux پیش کرتا ہے Airpure®، ایک خیمہ…

اپریل 12 2024

ڈیزائن پیٹرنز بمقابلہ ٹھوس اصول، فوائد اور نقصانات

ڈیزائن پیٹرن سافٹ ویئر ڈیزائن میں بار بار آنے والے مسائل کے لیے مخصوص نچلے درجے کے حل ہیں۔ ڈیزائن کے نمونے ہیں…

اپریل 11 2024

Magica، iOS ایپ جو گاڑی چلانے والوں کی زندگی کو ان کی گاڑی کے انتظام میں آسان بناتی ہے۔

میجیکا ایک آئی فون ایپ ہے جو گاڑیوں کے انتظام کو آسان اور موثر بناتی ہے، ڈرائیوروں کو بچانے اور…

اپریل 11 2024

ایکسل چارٹس، وہ کیا ہیں، چارٹ کیسے بنائیں اور بہترین چارٹ کا انتخاب کیسے کریں۔

ایکسل چارٹ ایک بصری ہے جو ایکسل ورک شیٹ میں ڈیٹا کی نمائندگی کرتا ہے۔…

اپریل 9 2024

اپنی زبان میں انوویشن پڑھیں

انوویشن نیوز لیٹر
جدت پر سب سے اہم خبروں کو مت چھوڑیں۔ ای میل کے ذریعے انہیں وصول کرنے کے لیے سائن اپ کریں۔

ہمارے ساتھ چلیے