Sobes.tech
Junior — Middle

Kuo skiriasi sąsaja nuo abstrakčiosios klasės objektų orientuoto programavimo kontekste?

sobes.tech AI

Atsakymas iš AI

Objektų orientuoto programavimo abstrakcijos apibrėžiamos dviem būdais: sąsaja ir abstrakčiuoju klasiu, tačiau jie turi pagrindinius skirtumus:

  • Sąsaja aprašo metodų rinkinį, kurį klasė turi įgyvendinti, tačiau ji pati neturi įgyvendinimo (nors kai kuriose kalbose gali būti numatyto įgyvendinimo metodų). Sąsaja negali turėti būsenos (kintamųjų).
  • Abstrakčioji klasė gali turėti tiek abstrakčių (be įgyvendinimo), tiek įgyvendintų metodų. Ji taip pat gali turėti laukų (būsenos).

Pavyzdys Swift kalba:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Variklis įjungtas")
    }
}

// Abstrakčioji klasė Swift kalba įgyvendinama per klasę su metodais, kuriuos reikia perrašyti
class Animal {
    func makeSound() {
        fatalError("Šis metodas turi būti perrašytas")
    }
}

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

Taip, sąsaja nustato sutartį, o abstrakčioji klasė gali teikti dalinę įgyvendinimą ir saugoti būseną.