Kas ir Barbara Liskovas aizvietošanas princips un kā tas tiek piemērots programmēšanā?
sobes.tech AI
Atbilde no AI
Barbara Liska pakaitības princips (LSP) nosaka, ka bērnu klases objektiem jābūt spējīgiem aizstāt vecāku klases objektus, neapdraudot programmas pareizību.
Pielietojums Android izstrādē:
-
Klases hierarhijas: Projektējot klases hierarhijas (piemēram, mantošana no
View,Fragment,Activity), LSP garantē, ka bērnu klases instances izmantošana vietā, kur ir paredzēts vecāku klases instances, nesagādās negaidītu uzvedību. -
Saskarnes: Ja klase realizē saskarni, tai jāveic tā, lai to varētu izmantot visur, kur tiek sagaidīts saskarnes tips, neapdraudot lietotāja gaidas.
// Nepareizi (lauž LSP) // Printer saskarne sagaida, ka print() vienmēr kaut ko drukās interface Printer { fun print(document: String) } class BasicPrinter : Printer { override fun print(document: String) { println("Druka: $document") } } class BrokenPrinter : Printer { override fun print(document: String) { // Dažreiz nekas netiek drukāts, lauži saskarnes līgumu if (Math.random() > 0.5) { // Nekas nedara } else { println("Druka: $document") } } } // Pareizi (ievēro LSP) class SimplePrinter : Printer { override fun print(document: String) { println("Druka: $document") } } class MockPrinter : Printer { override fun print(document: String) { // Vienmēr veic darbību, kas atbilst līgumam (piemēram, imitē drukāšanu) println("Mock drukāšana: $document") // Var ierakstīt žurnālā vai veikt citu gaidāmo darbību } } -
Testēšana: LSP ievērošana atvieglo testēšanu, jo var izmantot mokus vai aizstājējus (kas ir apakštipi) vietā ar reālām realizācijām, nemainot testu loģiku.
-
Līgumi: LSP uzsver metožu līgumu ievērošanu — visus gaidāmos nosacījumus pirms izsaukuma (priekšnosacījumus), pēc izsaukuma (pēcnosacījumus) un invariants (objekta stāvokli). Apakšklase nedrīkst vājināt priekšnosacījumus vai pastiprināt pēcnosacījumus vecāku klasē.
Nosacījums Vecāku klase (Supertips) Apakšklase (Apakštip) Priekšnosacījums Var vājāk būt Jābūt tādam pašam vai vājākam Pēcnosacījums Var stiprināt Jābūt tādam pašam vai stiprinātam Invariants Jāievēro Jāievēro tāpat vai stingrāk Izņēmumi Var tikt izņemts XVar tikt izņemts Xvai apakštipX