Sobes.tech
Middle+

Barbara Liskovning o'rnash prinsipi nima va u dasturlashda qanday qo'llaniladi?

sobes.tech AI

AIdan javob

Barbara Liskiyning o‘rnini almashtirish prinsipi (LSP) shuni anglatadiki, dasturda, bolalar sinflarining obyektlari ota sinflarining obyektlarini almashtirishi mumkin bo‘lishi kerak, bu dastur to‘g‘ri ishlashini buzmasdan.

Android dasturlashda qo‘llanilishi:

  1. Sinf hierarxiyalari: (masalan, View, Fragment, Activity dan meros olgan) sinf hierarxiyalari dizayni davomida, LSP, kichik sinfa obyektining katta sinf o‘rnini bosishi kutilgan joyda, kutilmagan xatti-harakatlarga olib kelmasligini ta’minlaydi.

  2. Interfeyslar: Agar sinf interfeysni amalga oshirsa, u har joyda, interfeys turini kutayotgan joyda ishlatilishi mumkin bo‘lishi kerak, bu esa iste’molchining kutganlarini buzmaydi.

    // Noto‘g‘ri (LSP ni buzadi)
    // Printer interfeysi, print() har doim nimadir chop etishini kutadi
    interface Printer {
        fun print(document: String)
    }
    
    class BasicPrinter : Printer {
        override fun print(document: String) {
            println("Chop etish: $document")
        }
    }
    
    class BrokenPrinter : Printer {
        override fun print(document: String) {
            // Ba’zan hech narsa chop etmaydi, interfeys shartini buzadi
            if (Math.random() > 0.5) {
                // Hech narsa qilma
            } else {
                println("Chop etish: $document")
            }
        }
    }
    
    // To‘g‘ri (LSP ga amal qiladi)
    class SimplePrinter : Printer {
        override fun print(document: String) {
            println("Chop etish: $document")
        }
    }
    
    class MockPrinter : Printer {
        override fun print(document: String) {
            // Har doim amalni bajaradi, shartga muvofiq (hatto chop etishni taqlid qilsa ham)
            println("Mock chop etish: $document")
            // Logga yozish yoki boshqa kutilgan harakatlarni bajarish mumkin
        }
    }
    
  3. Testlar: LSP ga rioya qilish testlarni soddalashtiradi, chunki haqiqiy amalga oshirishlar o‘rniga mock yoki stublar (subtiplar) ishlatilishi mumkin va test mantiqi o‘zgarmaydi.

  4. Shartlar: LSP, metodlarning shartlariga rioya qilishning muhimligini ta’kidlaydi — chaqirishdan oldingi (preconditions), chaqirishdan keyingi (postconditions) va invariants (obyekt holati) shartlari.

    Shart Ota sinf (Supertype) Bolalar sinfi (Subtype)
    Oldin shart Yengillashtirilishi mumkin Bir xil yoki yengillashtirilgan bo‘lishi kerak
    Keyin shart Kuchaytirilishi mumkin Bir xil yoki kuchaytirilgan bo‘lishi kerak
    Invariant Amalga oshirilishi kerak Bir xil yoki undan qat’iyroq bo‘lishi kerak
    Istisnolar X chiqarilishi mumkin X yoki X ning subtipi chiqarilishi mumkin