Koji od SOLID principa vam je najteže da primenite u praksi?
sobes.tech АИ
Одговор од АИ
Princip principa zamene Barbare Liskov (LSP).
Teškoće su u tome što kršenje LSP nije uvek očigledno na prvi pogled i može se otkriti samo korišćenjem podklasa u kontekstu gde se očekuje ponašanje osnovne klase. To zahteva duboko razumevanje predviđenog ponašanja osnovne klase i temeljno testiranje.
Primer kršenja:
class Rectangle {
var width: Double = 0
var height: Double = 0
func setWidth(_ width: Double) { self.width = width }
func setHeight(_ height: Double) { self.height = height }
func area() -> Double { width * height }
}
class Square: Rectangle {
override func setWidth(_ width: Double) {
super.setWidth(width)
super.setHeight(width) // Kršenje LSP: promena širine utiče na visinu
}
override func setHeight(_ height: Double) {
super.setHeight(height)
super.setWidth(height) // Kršenje LSP: promena visine utiče na širinu
}
}
Ako koristite Square tamo gde se očekuje Rectangle, ponašanje Square pri promeni samo jedne strane (širine ili visine) će dovesti do nepredvidivih rezultata, jer osnovna klasa Rectangle nema takvo ponašanje.
Da biste sprečili kršenja LSP, često je potrebno preispitati hijerarhije klasa, koristiti kompoziciju umesto nasleđivanja ili uvesti apstraktije interfejse/protokole. To može povećati složenost u projektovanju na početnim fazama.
Tabela poređenja:
| SOLID princip | Kratak opis | Glavni izazov u primeni LSP |
|---|---|---|
| S (SRP) | Jedna klasa - jedan razlog za promenu | Pronalaženje "jedinstvenog razloga" |
| O (OCP) | Otvoren za proširenje, zatvoren za modifikaciju | Pravilno korišćenje apstrakcija |
| L (LSP) | Podklase moraju biti zamenljive osnovnim klasama | Nejasnoće u kršenjima, zahteva razumevanje ugovora osnovne klase |
| I (ISP) | Klijenti ne bi trebalo da zavise od neiskorišćenih metoda | Podela interfejsa |
| D (DIP) | Zavisnost od apstrakcija, a ne od konkretnih implementacija | Umetanje zavisnosti |