Sobes.tech
Middle

Go dilində obyekt yönümlü proqramlaşdırma (OOP) anlayışları necə həyata keçirilir?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da digər dillərdə (Java, C++) geniş yayılmış klasslar, irsiyyət və virtual metodlar kimi klassik anlayışlar mövcud deyil. Obyekt yönümlü proqramlaşdırma aşağıdakı yollarla həyata keçirilir:

  • Strukturlar (Structs): Məlumatları (sahələri) qruplaşdırır.
    type Person struct {
    	Name string
    	Age  int
    }
    
  • Metodlar: Bir əlaqəli qəbul edən (struktur və ya başqa tip) ilə funksiyalar. Strukturlara davranış əlavə etməyə imkan verir.
    func (p Person) Greet() string {
    	return "Hello, my name is " + p.Name
    }
    
    • Qiymət qəbul edən: Metod strukturun nüsxəsi ilə işləyir. Daxili dəyişikliklər orijinal strukturu təsir etmir.
    • İşarəçi qəbul edən: Metod orijinal struktur ilə işarəçi vasitəsilə işləyir. Daxili dəyişikliklər orijinal strukturu təsir edir.
  • İnterfeyslər: Bir tipin uyğun gəlməsi üçün metodların imzalarını müəyyən edir. "Ördək tipi" (duck typing) ilə çox formallıq təmin edir. Bir tip, bütün metodlarını həyata keçirərsə, interfeysi həyata keçirir.
    type Greeter interface {
    	Greet() string
    }
    
    func SayHello(g Greeter) string {
    	return g.Greet()
    }
    
  • Yerləşdirmə (Embedding): Bir strukturun başqa bir strukturu və ya interfeysi "yerləşdirməsinə" imkan verir. Bu, klassik mənada irsiyyət deyil, daha çox tərkibdir. Yerləşdirilmiş struktur anonim sahəyə çevrilir və onun sahələri və metodlarına birbaşa müraciət etmək mümkündür.
    type Employee struct {
    	Person // yerləşdirilmiş struktur
    	ID string
    }
    
    // Employee indi Name və Age sahələrinə malikdir və Greet() metodunu çağırır
    
    e := Employee{
    	Person: Person{Name: "Alice", Age: 30},
    	ID:     "E123",
    }
    fmt.Println(e.Greet()) // Person-un Greet() metodunu Employee vasitəsilə çağırış
    
OOP Konsepti Go-da tətbiqi Qeydler
Siniflər Structlar class açar sözü yoxdur
İnkişaf Eksport edilən (böyük hərflə başlayan) / edilməyən (kiçik hərflə başlayan) sahələr/metodlar Paket səviyyəsində görünürlük idarəetməsi
İrsiyyət Yerləşdirmə (Embedding) Hierarxik irsiyyət yerinə kompozisiya
Çox formallıq İnterfeyslər Duck typing, interfeyslərin qeyri-şüurlu tətbiqi