Sobes.tech
Junior — Middle

Можете ли да обясните принципа на разделяне на интерфейсите в обектно-ориентираното програмиране?

sobes.tech AI

Отговор от AI

Принципът за разделяне на интерфейсите (Interface Segregation Principle, ISP) казва, че е по-добре да създавате няколко специализирани интерфейса, отколкото един универсален. Клиентите не трябва да зависят от методи, които не използват.

На практика това означава, че ако имате интерфейс с много методи и различни класове използват само част от тях, трябва да разделите интерфейса на няколко по-тесни. Това увеличава гъвкавостта и улеснява поддръжката на кода.

Например, в iOS можете да разделите интерфейса за работа с мрежа и с база данни:

protocol NetworkService {
    func fetchData()
}

protocol DatabaseService {
    func saveData()
}

class DataManager: NetworkService, DatabaseService {
    func fetchData() {
        // реализация на зареждане на данни
    }
    
    func saveData() {
        // реализация на запазване на данни
    }
}

Така, ако клас използва само мрежови функции, може да зависи само от NetworkService, без да знае за методите за запазване на данни.