Sobes.tech
Middle

როგორ არის მოწყობილი ობიექტზე ორიენტირებული მოდელი Go-ში?

sobes.tech AI

პასუხი AI-სგან

Go-ში ტრადიციული ობიექტზე ორიენტირებული მოდელი, რომელიც ღრმა მემკვიდრეობის ჰიერჰიით არის განლაგებული, არ არსებობს. ამის ნაცვლად გამოიყენება:

  • სტრუქტურები (Structs): მონაცემთა ველები, რომლებიც ანალოგიურია კლასებს მეთოდების გარეშე.

    type Person struct {
        Name string
        Age  int
    }
    
  • მეთოდები: ფუნქციები, რომლებიც დაკავშირებულია კონკრეტულ სტრუქტურასთან. ისინი განისაზღვრება სტრუქტურიდან დამოუკიდებლად.

    func (p Person) Greet() string {
        return "Hello, my name is " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • მიღების მიმღები-ღირებულებით (მაგ., (p Person)) მუშაობს სტრუქტურის ასლთან.
    • მიღების მიმღები-კავშირით (მაგ., (p *Person)) მუშაობს ორიგინალ სტრუქტურასთან და საშუალებას აძლევს მისი ველების შეცვლას.
  • ინტერფეისები: მეთოდების სიგნატურების ნაკრები. ტიპები, რომლებიც ახორციელებენ ყველა მეთოდს ინტერფეისის, ავტომატურად აკმაყოფილებენ ამ ინტერფეისს. ეს არის პოლიმორფიზმის საფუძველი Go-ში.

    type Greeter interface {
        Greet() string
    }
    
    // Person ავტომატურად ახორციელებს Greeter-ს
    
  • კომპოზიცია (შენაერთება): მემკვიდრეობის ნაცვლად, ერთი სტრუქტურა შეიძლება ჩააშენოს სხვა სტრუქტურა, მის ველებსა და მეთოდებს მისაწვდომად.

    type Employee struct {
        Person // შენაერთება Person სტრუქტურა
        ID     string
    }
    
    func (e Employee) GetID() string {
        return e.ID
    }
    

    შენაერთი ველები და მეთოდები ხელმისაწვდომია პირდაპირ:

    e := Employee{
        Person: Person{Name: "Alice", Age: 30},
        ID:     "E123",
    }
    fmt.Println(e.Name)     // წვდომა ველზე Name შენაერთი Person-ის მეშვეობით
    fmt.Println(e.Greet())  // მეთოდის Greet გამოძახება შენაერთი Person-ის მეშვეობით
    fmt.Println(e.GetID())  // Employee-ის მეთოდის გამოძახება
    

ამგვარად, Go-ში ობიექტზე ორიენტირებული მოდელი დაფუძნებულია სტრუქტურების კომპოზიციასა და ინტერფეისებით განსაზღვრულ ქცევაზე, არა კლასიკური მემკვიდრეობის ჰიერჰიაზე.