Sobes.tech
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, internal ishlatiladi. 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.