Sobes.tech
Junior — Middle

Kāda ir atšķirība starp saskarni un abstrakto klasi objektorientētās programmēšanas kontekstā?

sobes.tech AI

Atbilde no AI

Objektorientētās programmēšanas abstrakcijas ir divos veidos: saskarne un abstraktā klase, taču tiem ir galvenās atšķirības:

  • Saskarne apraksta metožu kopumu, kuras klasei jāievieš, bet tā pati nesatur ieviešanu (lai gan dažās valodās ir iespējamas noklusējuma metodes ar ieviešanu). Saskarne nevar saturēt stāvokli (instancijas mainīgos).
  • Abstraktā klase var saturēt gan abstraktas metodes (bez ieviešanas), gan metodes ar ieviešanu. Tā arī var saturēt laukus (stāvokli).

Piemērs Swift valodā:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Motors ieslēgts")
    }
}

// Abstrakta klase Swift tiek realizēta ar klasi ar metodēm, kuras ir jāpārraksta
class Animal {
    func makeSound() {
        fatalError("Šo metodi ir jāpārraksta")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Hau")
    }
}

Tādējādi, saskarne nosaka līgumu, bet abstraktā klase var nodrošināt daļēju ieviešanu un uzglabāt stāvokli.