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() // կանչել ներմուծված կառուցվածքի մեթոդը
}

Միջերֆեյսի իրականացման օրինակ՝ Go-ում:

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#-ը պահպանում է ավանդական և հիերարխիկ մոդելը։