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