Sobes.tech
Junior — Middle

Aký je rozdiel medzi rozhraním a abstraktnou triedou v kontexte objektovo orientovaného programovania?

sobes.tech AI

Odpoveď od AI

Rozhranie a abstraktná trieda sú dva spôsoby, ako definovať abstrakcie v objektovo orientovanom programovaní, ale majú kľúčové rozdiely:

  • Rozhranie opisuje súbor metód, ktoré musí trieda implementovať, ale neobsahuje implementáciu (hoci v niektorých jazykoch sú možné metódy s predvolenou implementáciou). Rozhranie nemôže obsahovať stav (premenné inštancie).
  • Abstraktná trieda môže obsahovať ako abstraktné metódy (bez implementácie), tak aj metódy s implementáciou. Môže tiež obsahovať polia (stav).

Príklad v Swift:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Motor spustený")
    }
}

// Abstraktná trieda v Swift je realizovaná cez triedu s metódami, ktoré je potrebné prepísať
class Animal {
    func makeSound() {
        fatalError("Táto metóda musí byť prepísaná")
    }
}

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

Týmto spôsobom, rozhranie stanoví zmluvu, a abstraktná trieda môže poskytovať čiastočnú implementáciu a uchovávať stav.