Sobes.tech
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