Liskov substitution principle
Ezen már régóta töröm a fejem: OK, ezek nem kőbe vésett szabályok, csak elvek, de ha ragaszkodom a S.O.L.I.D. L betűjének betartásához, akkor mi értelme a felüldefiniálható metódusoknak az OO nyelvekben? Hiszen ennek épp az a lényege, hogy az adott metódus működését megváltoztatom. Nem?
Mi az amit rosszul értelmezek?
Valahol erről már beszéltem valakivel, de nem találom, a memóriám meg... :-(
--------------------------------------------
(Itt találtam egy magyar leírást. Úgy látszik, az angolom hiányosabb, mint képzeltem. És a felfogóképességem is. Továbbra sem értem, de attól tartok, ezek után hiába próbálja bárki elmagyarázni, nem fogom megérteni. :-(
■ Mi az amit rosszul értelmezek?
Valahol erről már beszéltem valakivel, de nem találom, a memóriám meg... :-(
--------------------------------------------
(Itt találtam egy magyar leírást. Úgy látszik, az angolom hiányosabb, mint képzeltem. És a felfogóképességem is. Továbbra sem értem, de attól tartok, ezek után hiába próbálja bárki elmagyarázni, nem fogom megérteni. :-(
Kulcsszo: correctness
Ez azt jelenti, hogy abban az esetben, hogyha feluldefinialsz egy leszarmazasban egy metodust, akkor kicserelve a szulo osztaly objektumat a gyermek osztaly objektumara, a program mukodese helyes marad. Az, hogy az adott metodus hogyan biztositja a program helyesseget, az csak es kizarolag a metodus feladata.
Ezek alapján, ha van egy
Casting
equals() es hashCode()
A nagyon formális
A gyakorlatban egyszerűen csak arról van szó, hogy az alkalmazónak van valami elképzelése arról, hogy mit csinál az adott absztrakció (pl. egy cache-be ha beteszel egy elemet egy adott kulccsal, és később lekérdezed azt a kulcsot, akkor visszakapod a betett elemet), és az összes megvalósításnak ennek megfelelően kell viselkednie (legyen az fájl cache vagy db cache vagy bármi egyéb).
Még gyakorlatabban persze ez se igaz, az absztrakciók mindig eresztenek. Például ha memcached van a cache mögött, akkor néha beteszed az elemet, és nem jön ki belőle; vagy különféle implementációk különféle karaktereket fogadnak el a kulcsban. Ahogy a többi OOP alapelvnél, itt is tisztában kell vele lenni, hogy miért hasznos, és amikor nem az, akkor nem kell túl komolyan venni. Ha egy más által írt, publikus interfészhez írsz mások által használandó implementációt (teszem azt egy DB absztrakciós rendszerhez publikálsz egy új csatolót), akkor illik nagyon vigyázni, ha saját használatra dolgozol, akkor csak annyira, hogy magadat ne szivasd meg.