Middle+
Go və C#-də obyekt yönümlü proqramlaşdırmanın tətbiqini müqayisə edin.
sobes.tech Süni İntellekt
AI-dan cavab
Go-da klassik obyekt yönümlü irsi və siniflər mövcud deyil. Əvəzində, Go kompozisiya və interfeyslərdən istifadə edir.
Əsas fərqlər:
- Siniflər və obyektlər: C# siniflərə əsaslanır, onlardan obyektlər yaradılır. Go strukturlar (structs) istifadə edir və metodlara malik ola bilər.
- İrsiyyət: C# tək və çox irsiyyəti (interfeyslər vasitəsilə) dəstəkləyir. Go, strukturların daxil edilməsi (kompozisiya) və interfeyslər vasitəsilə çox formallıq dəstəkləyir.
- Interfeyslər: C#-da interfeyslər açıq şəkildə tətbiq olunmalıdır. Go-da, interfeyslər qeyri-şüurlu şəkildə tətbiq olunur: əgər struktur interfeysin imzasına uyğun metodlara malikdirsə, onu avtomatik olaraq tətbiq edir.
- Görünürlük (Əlçatanlıq Modifikatorları): C#-da
public,private,protected,internalistifadə olunur. Go-da görünürlük, adın ilk hərfi böyükdürsə, açıq; kiçikdirsə, paket daxilindədir. - Generics: C# inkişaf etmiş generics sisteminə malikdir. Go 1.18 versiyasından etibarən generics dəstəyi əlavə etdi.
Go-da kompozisiya nümunəsi:
package main
import "fmt"
type Engine struct {
Type string
}
func (e Engine) Start() {
fmt.Printf("%s mühərrik başladı!\n", e.Type)
}
type Car struct {
Model string
Engine // Adi daxil etmə - kompozisiya
}
func main() {
myCar := Car{
Model: "Sedan",
Engine: Engine{
Type: "Benzin",
},
}
fmt.Printf("Maşın modeli: %s\n", myCar.Model)
myCar.Start() // Daxil edilmiş strukturanın metodunu çağırmaq
}
Interfeys tətbiqi nümunəsi:
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Dog struct{}
func (d Dog) Speak() string {
return "Hav!"
}
type Cat struct{}
func (c Cat) Speak() string {
return "Miyav!"
}
func main() {
animals := []Speaker{Dog{}, Cat{}} // Speaker interfeysini tətbiq edən tiplər siyahısı
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
Cədvəldə:
| Xüsusiyyət | Go | C# |
|---|---|---|
| Siniflər | Yox (struktur) | Bəli |
| Obyektlər | Struktur nümunələri | Sinif nümunələri |
| İrsiyyət | Kompozisiya, interfeyslər | Klassik (sadə), interfeyslər |
| Interfeys | Qeyri-şüurlu tətbiq | Açıqlama ilə tətbiq |
| Görünürlük | Birinci hərf böyükdür | public, private, protected və s. |
| Generics | Versiya 1.18-dən etibarən | Bəli |
Go-nun OOP yanaşması daha çox mərkəzsiz və davranışa (interfeyslər vasitəsilə) və məlumat strukturlarına (daxil etmə ilə) yönəlib, bu da daha çevik və asan test edilə bilən kodlara gətirib çıxarır. C# daha ənənəvi və hierarxik modeli izləyir.