Sobes.tech
Middle+

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ē:

  1. 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.

  2. 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
        }
    }
    
  3. 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.

  4. 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 X Var tikt izņemts X vai apakštip X