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