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.