Sobes.tech
Middle

Go-da obyekt yönümlü model necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Go'da ənənəvi obyekt yönümlü model və dərin irsiyyət hierarxiyası mövcud deyil. Əvəzinə, aşağıdakılar istifadə olunur:

  • Strukturlar (Structs): Məlumat sahələrini müəyyən edir, metodlar olmadan siniflərə bənzəyir.

    type Person struct {
        Name string
        Age  int
    }
    
  • Metodlar: Müəyyən bir strukturla əlaqəli funksiyalar. Onlar strukturdan ayrı olaraq müəyyən edilir.

    func (p Person) Greet() string {
        return "Salam, mənim adım " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • Qiymət qəbul edənlə (məsələn, (p Person)) metodlar strukturun nüsxəsi ilə işləyir.
    • Göstərici qəbul edənlə (məsələn, (p *Person)) metodlar isə strukturun orijinalı ilə işləyir və onun sahələrini dəyişdirməyə imkan verir.
  • İnterfeyslər: Metod imzalarının toplusu. Bir tip bütün metodları tətbiq edərsə, şərti olaraq bu interfeysi təmin edir. Bu, Go'da çox biçimlilik (polimorfizm) əsasdır.

    type Greeter interface {
        Greet() string
    }
    
    // Person, Greeter-i şərti olaraq təmin edir
    
  • Kompozisiya (İç içe yerləşdirmə): Miras yerinə, bir struktur başqa bir strukturu daxil edə bilər, onun sahələrinə və metodlarına çıxış əldə edir.

    type Employee struct {
        Person // Person strukturunu daxil edir
        ID     string
    }
    
    func (e Employee) GetID() string {
        return e.ID
    }
    

    Daxil edilən sahələr və metodlar birbaşa əlçatandır:

    e := Employee{
        Person: Person{Name: "Alice", Age: 30},
        ID:     "E123",
    }
    fmt.Println(e.Name)     // Daxil edilən Person vasitəsilə Name sahəsinə çıxış
    fmt.Println(e.Greet())  // Daxil edilən Person vasitəsilə Greet metodunu çağırır
    fmt.Println(e.GetID())  // Employee metodunu çağırır
    

Beləliklə, Go'da obyekt yönümlü model strukturların kompozisiyasına və interfeyslər tərəfindən müəyyən olunan davranışa əsaslanır, klassik irsiyyət hierarxiyasına deyil.