Sobes.tech
Middle+

რა არის ბარბარა ლისკოვის ჩანაცვლების პრინციპი და როგორ გამოიყენება პროგრამირებაში?

sobes.tech AI

პასუხი AI-სგან

بارбარა ليسکوف جي مٽاسٽا اصول (LSP) چوي ٿو ته ذيلي ڪلاس جا اوبجيڪٽ مٿين ڪلاس جا اوبجيڪٽس جي جاءِ وٺي سگهن ٿا، بغير پروگرام جي صحيح ڪم کي متاثر ڪرڻ.

Android ترقي ۾ استعمال:

  1. ڪلاس جي وراثت: جڏهن ڪلاس جي وراثت جي ترتيب کي ڊزائين ڪيو وڃي (مثلاً، View، Fragment، Activity مان وراثت)، LSP يقين ڏياري ٿو ته ذيلي ڪلاس جو استعمال مٿين ڪلاس جي جاءِ تي غير متوقع رويو پيدا نٿو ڪري.

  2. انٽرفيسز: جيڪڏهن ڪلاس انٽرفيس کي لاڳو ڪري ٿو، ته اهو اهڙي طرح ڪرڻ گهرجي ته ان کي هر جاءِ تي استعمال ڪري سگهجي، جتي انٽرفيس جو قسم توقع ڪئي وڃي، بغير صارف جي اميدن کي ٽوڙي.

    // غلطي (LSP ٽوڙي ٿو)
    // Printer انٽرفيس اميد ڪري ٿو ته print() هميشه ڪجهه پرنٽ ڪندو
    interface Printer {
        fun print(document: String)
    }
    
    class BasicPrinter : Printer {
        override fun print(document: String) {
            println("پرنٽنگ: $document")
        }
    }
    
    class BrokenPrinter : Printer {
        override fun print(document: String) {
            // ڪڏهن ڪڏهن ڪجهه نه پرنٽ ڪري، انٽرفيس جي معاهدي کي ٽوڙي
            if (Math.random() > 0.5) {
                // ڪجھ نٿو ڪري
            } else {
                println("پرنٽنگ: $document")
            }
        }
    }
    
    // صحيح (LSP کي برقرار رکندي)
    class SimplePrinter : Printer {
        override fun print(document: String) {
            println("پرنٽنگ: $document")
        }
    }
    
    class MockPrinter : Printer {
        override fun print(document: String) {
            // هميشه اهڙو عمل ڪري ٿو جيڪو معاهدي سان مطابقت رکي ٿو (پرنٽ جي نقل)
            println("Mock پرنٽ: $document")
            // لاگ ۾ لکي سگھي ٿو يا ٻيو اميد ٿيل عمل ڪري سگھي ٿو
        }
    }
    
  3. ٽيسٽنگ: LSP جي پيروي ڪرڻ ٽيسٽنگ کي آسان بڻائي ٿي، ڇو ته موڪ يا اسٽاب استعمال ڪري سگھجن ٿا (جيڪي ذيلي قسمون آهن) حقيقي عملن جي جاءِ تي، بغير ٽيسٽ لاجڪ کي تبديل ڪرڻ جي.

  4. معاهدا: LSP طريقن جي معاهدن جي پيروي تي زور ڏئي ٿو — سڀ اميدوار شرطون، ڪال ڪرڻ کان اڳ (پيش شرطون)، ڪال کان پوءِ (پوسٽ شرطون) ۽ invariants (شيءَ جي حالت). ذيلي ڪلاس کي والدين جي ڪلاس جي پيش شرطن کي ڪمزور نٿو ڪرڻ گهرجي يا پوسٽ شرطون وڌائڻ گهرجن.

    شرط والدين ڪلاس (سپرٽائپ) ذيلي ڪلاس (ذيل قسم)
    پيش شرط هلڪو ٿي سگھي ٿو ساڳيو يا هلڪو هجڻ گهرجي
    پوسٽ شرط مضبوط ٿي سگھي ٿو ساڳيو يا مضبوط هجڻ گهرجي
    invariants برقرار رکڻ گهرجي ساڳيو يا وڌيڪ سختي سان برقرار رکڻ گهرجي
    استثنا X نڪرڻ ٿي سگھي ٿو X يا ان جو ذيلي قسم X نڪرڻ ٿي سگھي ٿو