Middle+
Go va C# da ob'ektga yo'naltirilgan dasturlashni amalga oshirishni taqqoslang.
sobes.tech AI
AIdan javob
Go'da an'anaviy ob'ektga yo'naltirilgan meroslik va sinflar mavjud emas. O'rniga, Go kompozitsiya va interfeyslarni ishlatadi.
Asosiy farqlar:
- Sinflar va ob'ektlar: C# sinflarga asoslangan bo'lib, ulardan ob'ektlar yaratiladi. Go strukturalar (structs) ni ishlatadi, ular metodlarga ega bo'lishi mumkin.
- Meroslik: C# oddiy va ko'p meroslikni (interfeyslar orqali) qo'llab-quvvatlaydi. Go kompozitsiya (strukturalarni qo'shish) va polimorfizmni interfeyslar orqali ta'minlaydi.
- Interfeyslar: C# da interfeyslar aniq amalga oshirilishi kerak. Go'da, interfeyslar noaniq tarzda amalga oshiriladi: agar struktura interfeysning imzosiga mos keladigan metodlarga ega bo'lsa, u avtomatik ravishda uni amalga oshiradi.
- Ko'rinish (Kirish modifikatorlari): C# da
public,private,protected,internalishlatiladi. Go'da ko'rinish, nomning birinchi harfi katta bo'lsa, ochiq; kichik bo'lsa, faqat paket ichida ko'rinadi. - Generics: C# ilg'or generics tizimiga ega. Go 1.18 versiyasidan boshlab genericsni qo'shdi.
Go'da kompozitsiya misoli:
package main
import "fmt"
type Engine struct {
Type string
}
func (e Engine) Start() {
fmt.Printf("%s dvigatel ishga tushdi!\n", e.Type)
}
type Car struct {
Model string
Engine // Nomli bo'lmagan joylashtirish - kompozitsiya
}
func main() {
myCar := Car{
Model: "Sedan",
Engine: Engine{
Type: "Benzin",
},
}
fmt.Printf("Mashina modeli: %s\n", myCar.Model)
myCar.Start() // O'rnatilgan strukturaning metodini chaqirish
}
Interfeysni amalga oshirish misoli:
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 amalga oshiradigan turlar ro'yxati
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
Jadvalda:
| Xususiyat | Go | C# |
|---|---|---|
| Sinflar | Yo'q (strukturalar) | Ha |
| Ob'ektlar | Strukturalar nusxalari | Sinflar nusxalari |
| Meroslik | Kompozitsiya, interfeyslar | An'anaviy (birlamchi), interfeyslar |
| Interfeyslar | Noaniq amalga oshirish | Aniq amalga oshirish |
| Ko'rinish | Birinchi harf katta bo'lishi | public, private, protected va boshqalar |
| Generics | 1.18 versiyasidan boshlab | Ha |
Go'ning OOP yondashuvi ko'proq markazlashmagan va xulq-atvor (interfeyslar orqali) va ma'lumotlar tuzilmasiga (qo'shish orqali) qaratilgan bo'lib, bu ko'pincha kodni yanada moslashuvchan va sinovdan o'tkaziladigan qiladi. C# esa an'anaviy va hierarxik modelga amal qiladi.