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# көбүрөөк салттуу жана иерархиялык моделди карманат.