Middle
Kā tiek īstenotas objektorientētās programmēšanas (OOP) jēdziens Go valodā?
sobes.tech AI
Atbilde no AI
Go nav klasiskās koncepcijas, kas raksturīgas citām valodām (Java, C++) – klases, mantošana un virtuālas metodes. OOP realizējas šādi:
- Struktūras (Structs): Apvieno datus (laukus).
type Person struct { Name string Age int } - Metodes: Funkcijas ar saistītu saņēmēju (struktūru vai citu tipu). ļauj struktūrām būt uzvedībai.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Saņēmējs pēc vērtības: Metode darbojas ar struktūras kopiju. Izmaiņas metodē neietekmē oriģinālo struktūru.
- Saņēmējs pēc norādītāja: Metode darbojas ar oriģinālo struktūru caur norādītāju. Izmaiņas metodē ietekmē oriģinālo struktūru.
- Interfeisi (Interfaces): Definē metožu parakstus, kuriem jāatbilst tipam. Nodrošina polimorfismu "pīļu tipa" (
duck typing). Tips netieši realizē interfeisu, ja realizē visas tā metodes.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Iekļaušana (Embedding): ļauj vienai struktūrai "iekļaut" citu struktūru vai interfeisu. Tas nav klasiskā mantošana, bet kompozīcija. Iekļautā struktūra kļūst par anonīmu lauku, uz kuru var tieši piekļūt caur iekļaujošās struktūras eksemplāru.
type Employee struct { Person // iekļautā struktūra ID string } // Employee tagad ir ar laukiem Name un Age, kā arī metodi Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // izsauc Person struktūras Greet() metodi caur Employee
| Objektorientētās koncepcijas | Realizācija Go | Piezīmes |
|---|---|---|
| Klases | Struktūras | Nav skaidras atslēgvārda class |
| Slēpšana (inkapsulācija) | Eksportējami (ar lielajiem burtiem) / Neeksportējami (ar mazajiem burtiem) lauki/metodes | Vadība redzamības līmenī paketē |
| Mantošana | Iekļaušana (Embedding) | Kompozīcija vietā hierarhiskās mantošanas |
| Polimorfisms | Interfeisi | Duck typing, neskaidra interfeisu realizācija |