Sobes.tech
Junior — Middle

Объектке багытталган программалоо контекстинде интерфейс менен абстракттуу класс арасындагы айырма эмнеде?

sobes.tech AI

AIден жооп

Объектке багытталган программалоодо абстракциялардын аныктамасы үчүн эки жол бар: интерфейс жана абстракттуу класс, бирок алар негизги айырмачылыктарга ээ:

  • Интерфейс класс тарабынан ишке ашырылышы керек болгон методдордун топтомун сүрөттөйт, бирок ишке ашырылышын камтыбайт (кей бир тилдерде алдын ала ишке ашырылган методдор мүмкүн). Интерфейс өзүнүн абалын (өзгөрмө) камтыбайт.
  • Абстракттуу класс абстракттуу методдорду (ишке ашырылбаган) жана ишке ашырылган методдорду камтышы мүмкүн. Ал ошондой эле талаалар (абал) камтышы мүмкүн.

Swiftте мисал:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Мотор ишке кирди")
    }
}

// Swiftте абстракттуу класс методдорду кайра аныктоо үчүн класс аркылуу ишке ашырылат
class Animal {
    func makeSound() {
        fatalError("Бул методду кайра аныктоо керек")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Гав")
    }
}

Ошентип, интерфейс келишимди белгилейт, ал эми абстракттуу класс жарым-жартылай ишке ашырууну камсыз кылып, абал сактай алат.