Sobes.tech
Middle+

შედარეთ ობიექტზე ორიენტირებული პროგრამირების განხორციელება Go და C#-ში.

sobes.tech AI

პასუხი AI-სგან

Go-да классикалык обьектке багышталган мурас жана класс деген түшүнүктөр жок. Ал ордуна Go композиция жана интерфейстерди колдонуп жатат.

Негизги айырмачылыктар:

  • Класстар жана объекттер: C# класстарга негизделген, алардын негизинде объекттер түзүлөт. Go структуралар (structs) колдонуп, аларга методдорду кошууга болот.
  • Мурас: C# жалгыз жана көпмүнөздүү (интерфейстер аркылуу) мураска ээ. Go композицияны (структураларды киргизүү) жана полиморфизмди интерфейстер аркылуу колдойт.
  • Интерфейстер: C#да интерфейстерди так класстын өзү реализация кылышы керек. Goда интерфейстер көрүнбөйт: структурага тиешелүү методдор бар болсо, ал автоматтык түрдө интерфейсти ишке ашырат.
  • Көрүнүш (Access Modifiers): C#да public, private, protected, internal колдонулат. Goда көрүнүш биринчи тамганың чоңдугу менен аныкталат: чоң тамга — ачык, кичине — жекече (пакет ичинде).
  • Генериктер: C#да өнүккөн системасы бар. Go 1.18 версиясынан бери генериктерди колдойт.

Goда композициянын мисалы:

package main

import "fmt"

type Engine struct {
	Type string
}

func (e Engine) Start() {
	fmt.Printf("%s кыймылдаткыч ишке кирди!\n", e.Type)
}

type Car struct {
	Model string
	Engine // анонимдүү киргизүү - композиция
}

func main() {
	myCar := Car{
		Model: "Sedan",
		Engine: Engine{
			Type: "Бензин",
		},
	}
	fmt.Printf("Автомобилдин модели: %s\n", myCar.Model)
	myCar.Start() // структуранын методун чакыруу
}

Интерфейстин реализациясы мисалы:

package main

import "fmt"

type Speaker interface {
	Speak() string
}

type Dog struct{}

func (d Dog) Speak() string {
	return "Вуф!"
}

type Cat struct{}

func (c Cat) Speak() string {
	return "Мяу!"
}

func main() {
	animals := []Speaker{Dog{}, Cat{}}
	for _, animal := range animals {
		fmt.Println(animal.Speak())
	}
}

Таблицада:

Белги Go C#
Класстар Жок (структуралар) Ооба
Объекттер Структуралардын экземплярлары Класстардын экземплярлары
Мурас Композиция, интерфейстер Класикалык (бирдиктүү), интерфейстер
Интерфейстер Жасалма реализация Ачык реализация
Көрүнүш Биринчи тамганың чоң тамгасы public, private, protected, жана башка
Генериктер 1.18ден баштап Ооба

Go-дун OOPка карашы көбүрөөк децентрализделген жана жүрүм-турумга (интерфейстер аркылуу) жана маалыматтар структурасына (встройка аркылуу) багытталган, бул көбүрөөк ийкемдүү жана оңой тесттелүүчү кодго алып келет. C# көбүрөөк салттуу жана иерархиялык моделди карманат.