Қоидаи ивазкунӣ-барбара Лисков ва чӣ гуна дар барномасозӣ истифода мешавад?
sobes.tech AI
Ҷавоб аз AI
Принципи ивазшавии Барбара Лисков (LSP) гӯяд, ки объектҳои подкласс бояд тавонанд ҷойгузин кардани объектҳои суперкласс бошанд, бидуни вайрон кардани дурустии барнома.
Барои истифода дар таҳияи Android:
-
Ҳиерархияҳои синфҳо: Дар тарҳрезии ҳиерархияҳои синфҳо (масалан, мерос аз
View,Fragment,Activity) LSP кафолат медиҳад, ки истифодаи намунаи подкласс ба ҷои суперкласс ба рафтори ғайзасоҳатӣ оварда намерасонад. -
Интерфейсҳо: Агар синф интерфейсро иҷро кунад, бояд онро тавонанд дар ҳама ҷо истифода бурд, ки интизор меравад, ки навъи интерфейс, бидуни вайрон кардани интизориҳои истеъмолкунанда.
// Нодуруст (вайрон кардани 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") // Мумкин аст ба лог нависад ё амали дигарро иҷро кунад } } -
Тест: Риояи LSP тестро осон мекунад, зеро метавон моки ё зериҷойгирҳоро (ки подклассҳо ҳастанд) ба ҷои реализацияҳои воқеӣ истифода бурд, бидуни тағир додани логикаи тест.
-
Шартҳо: LSP аҳамияти риояи шартҳои методҳоро таъкид мекунад — ҳамаи шароити интизоршаванда пеш аз даъват (шартҳои пеш), пас аз даъват (шартҳои пас) ва invariants (ҳолати объект). Подкласс набояд шартҳои пешро заиф гардонад ё шартҳои пасро қавитар кунад.
Шарт Синфи падар (Тамос) Синфи подкласс (Подтип) Шартҳои пеш Мумкин аст заифтар бошанд Мумкин аст ҳамон ё заифтар бошанд Шартҳои пас Мумкин аст қавитар бошанд Мумкин аст ҳамон ё қавитар бошанд Инвариант Бояд риоя шавад Бояд ҳамон ё ҳатто қатъии бештар риоя шавад Ихтисосҳо Мумкин аст Xхориҷ карда шавадМумкин аст Xё подклассXхориҷ карда шавад