Middle+
Uporedite implementaciju objektno-orijentisanog programiranja u Go i C#.
sobes.tech АИ
Одговор од АИ
У 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{}} // скуп типова који реализују интерфејс Speaker
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
У табели:
| Карактеристика | Go | C# |
|---|---|---|
| Класе | Нема (структуре) | Да |
| Објекти | Екземпляри структура | Екземпляри класа |
| Наслеђивање | Комозиција, интерфејси | Класично (једноставно), интерфејси |
| Интерфејси | Нејавно реализовани | Јавно реализовани |
| Видљивост | Регистар првог слова | public, private, protected, итд. |
| Генерички | Од верзије 1.18 | Да |
Приступ ООП у Go је више децентрализован и фокусира се на понашање (преко интерфејса) и структуру података (преко улагања), што често доводи до флексибилнијег и лакше тестирачког кода. C# се придржава традиционалнијег и хијерархичког модела.