Sobes.tech
Junior — Middle

Kaip objektinio programavimo struktūra įgyvendinta Go kalboje ir kaip ji skiriasi nuo klasikinės?

sobes.tech AI

Atsakymas iš AI

Go kalboje objektinės orientacijos programavimas įgyvendinamas per kompoziciją ir sąsajas, o ne per klases ir paveldėjimą, kaip klasikiniame OOP.

Pagrindiniai skirtumai:

  • Klasės nėra: Go nėra klasių, vietoj jų naudojamos struktūros (struct), kurios turi laukus ir metodus.
  • Kompozicija vietoj paveldėjimo: Vietoj paveldėjimo struktūras galima įtraukti viena į kitą, tai leidžia pakartotinai naudoti kodą.
  • Sąsajos: Go sąsajos apibrėžia metodų rinkinį, kurį turi įgyvendinti struktūra. Tipai automatiškai įgyvendina sąsają, jei turi būtinus metodus, be aiškios deklaracijos.

Pavyzdys:

package main
import "fmt"

type Animal interface {
    Speak() string
}

type Dog struct {}

func (d Dog) Speak() string {
    return "Woof!"
}

type Cat struct {}

func (c Cat) Speak() string {
    return "Meow!"
}

func main() {
    animals := []Animal{Dog{}, Cat{}}
    for _, a := range animals {
        fmt.Println(a.Speak())
    }
}

Taip Go siūlo paprastesnį ir lankstesnį objektinio programavimo modelį, pagrįstą sąsajomis ir kompozicija, be klasikinio paveldėjimo sudėtingumo.