Sobes.tech
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# се придржава традиционалнијег и хијерархичког модела.