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ą.