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.