Sobes.tech
Middle

Hogyan működik az objektumorientált modell a Go-ban?

sobes.tech MI

Válasz az MI-től

Go-ban nincs hagyományos objektum-orientált modell mély öröklődési hierarchiával. Ehelyett a következőket használják:

  • Struktúrák (Structs): Adatmezőket határoznak meg, hasonlóan osztályokhoz metódusok nélkül.

    type Person struct {
        Name string
        Age  int
    }
    
  • Metódusok: Függvények, amelyek egy adott struktúrához kötöttek. Külön vannak definiálva a struktúrától.

    func (p Person) Greet() string {
        return "Helló, a nevem " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • A érték-átadóval (pl. (p Person)) rendelkező metódusok a struktúra másolatával dolgoznak.
    • A pointer-átadóval (pl. (p *Person)) rendelkező metódusok az eredeti struktúrával dolgoznak, lehetővé téve a mezők módosítását.
  • Interfészek: Metódus szignatúrák halmazai. Azok a típusok, amelyek minden metódust megvalósítanak egy interfészben, implicit módon megfelelnek ennek az interfésznek. Ez a polimorfizmus alapja Go-ban.

    type Greeter interface {
        Greet() string
    }
    
    // Person implicit módon megvalósítja a Greeter-t
    
  • Összetétel (Beágyazás): Ahelyett, hogy öröklés lenne, egy struktúra beágyazhat egy másikat, hozzáférést biztosítva annak mezőihez és metódusaihoz.

    type Employee struct {
        Person // Beágyazza a Person struktúrát
        ID     string
    }
    
    func (e Employee) GetID() string {
        return e.ID
    }
    

    A beágyazott mezők és metódusok közvetlenül elérhetők:

    e := Employee{
        Person: Person{Name: "Alice", Age: 30},
        ID:     "E123",
    }
    fmt.Println(e.Name)     // Hozzáférés a Name mezőhöz a beágyazott Person-en keresztül
    fmt.Println(e.Greet())  // Metódus hívása a beágyazott Person-en keresztül
    fmt.Println(e.GetID())  // Employee metódus hívása
    

Így a Go objektum-orientált modellje a struktúrák összetételén és az interfészek által meghatározott viselkedésen alapul, nem pedig a klasszikus öröklődési hierarchián.