Middle
Kaip įgyvendinamos objektinio programavimo (OOP) koncepcijos Go kalboje?
sobes.tech AI
Atsakymas iš AI
Go neturi klasikinių koncepcijų, būdingų kitiems kalboms (Java, C++) – klasių, paveldėjimo ir virtualių metodų. Objektinio programavimo realizacija vyksta per:
- Struktūras (Structs): Apjungia duomenis (stulpelius).
type Person struct { Name string Age int } - Metodus: Funkcijos su susietu priėmėju (struktūra ar kita tipu). Leidžia struktūroms turėti elgseną.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Priėmėjas pagal reikšmę: Metodas veikia su kopija struktūros. Pakeitimai metodo viduje neįtakoja originalios struktūros.
- Priėmėjas pagal nuorodą: Metodas veikia su originalia struktūra per nuorodą. Pakeitimai metodo viduje įtakoja originalią struktūrą.
- Sąsajos (Interfaces): Apibrėžia metodų parašus, kuriems turi atitikti tipas. Užtikrina polimorfizmą "paukščio tipą" (
duck typing). Tipas neįvardytai įgyvendina sąsają, jei įgyvendina visas jos metodus.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Įdėjimas (Embedding): Leidžia vienai struktūrai "įdėti" kitą struktūrą ar sąsają. Tai nėra klasikinis paveldėjimas, o kompozicija. Įdėta struktūra tampa anonimine lauku, prie kurio galima tiesiogiai prieiti per įdėtos struktūros egzempliorių.
type Employee struct { Person // įdėta struktūra ID string } // Employee dabar turi laukus Name ir Age, taip pat metodą Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // kviečia Person struktūros Greet() metodą per Employee
| Objektinio programavimo koncepcija | Įgyvendinimas Go | Pastabos |
|---|---|---|
| Klasės | Struktūros | Nėra aiškios raktažodžio class |
| Užrakto (inkapsuliacijos) principas | Eksportuojami (didžiosiomis raidėmis) / Neeksportuojami (mažosiomis raidėmis) laukai/metodai | Valdymas matomumo lygyje pakete |
| Paveldėjimas | Įdėjimas (Embedding) | Kompozicija vietoj hierarchinio paveldėjimo |
| Polimorfizmas | Sąsajos (Interfaces) | Duck typing, neaiški sąsajų įgyvendinimas |