Sobes.tech
Middle+

Porovnajte implementáciu objektovo orientovaného programovania v Go a C#.

sobes.tech AI

Odpoveď od AI

V Go neexistuje klasické objektovo orientované dedičstvo a triedy v tradičnom zmysle. Namiesto toho Go používa kompozíciu a rozhrania.

Hlavné rozdiely:

  • Triedy a objekty: C# je založený na triedach, z ktorých sa vytvárajú objekty. Go používa štruktúry (structs), ktoré môžu mať metódy.
  • Dedičstvo: C# podporuje jednoduché a viacnásobné (cez rozhrania) dedičstvo. Go podporuje kompozíciu (vkladanie štruktúr) a polymorfizmus cez rozhrania.
  • Rozhrania: V C# musia byť rozhrania explicitne implementované triedou. V Go sú rozhrania implementované neexplicitne: ak štruktúra má metódy zodpovedajúce signatúre rozhrania, automaticky ho implementuje.
  • Viditeľnosť (Access Modifiers): V C# sa používajú public, private, protected, internal. V Go je viditeľnosť určená veľkosťou prvého písmena názvu: veľké písmeno - verejné, malé písmeno - súkromné (v rámci balíka).
  • Generiká: C# má rozvinutý systém generík. Go pridalo podporu generík od verzie 1.18.

Príklad kompozície v Go:

package main

import "fmt"

type Engine struct {
	Type string
}

func (e Engine) Start() {
	fmt.Printf("%s motor štartoval!\n", e.Type)
}

type Car struct {
	Model string
	Engine // anonymné vkladanie - kompozícia
}

func main() {
	myCar := Car{
		Model: "Sedan",
		Engine: Engine{
			Type: "Benzín",
		},
	}
	fmt.Printf("Model auta: %s\n", myCar.Model)
	myCar.Start() // volanie metódy vnútornej štruktúry
}

Príklad implementácie rozhrania v Go:

package main

import "fmt"

type Speaker interface {
	Speak() string
}

type Dog struct{}

func (d Dog) Speak() string {
	return "Vau!"
}

type Cat struct{}

func (c Cat) Speak() string {
	return "Mňau!"
}

func main() {
	animals := []Speaker{Dog{}, Cat{}} // zoznam typov implementujúcich rozhranie Speaker
	for _, animal := range animals {
		fmt.Println(animal.Speak())
	}
}

V tabuľke:

Prvok Go C#
Triedy Nie (štruktúry) Áno
Objekty Inštancie štruktúr Inštancie tried
Dedičstvo Kompozícia, rozhrania Klasické (jednoduché), rozhrania
Rozhrania Nepriame implementácie Priame implementácie
Viditeľnosť Veľkosť prvého písmena public, private, protected, atď.
Generiká Od verzie 1.18 Áno

Prístup k OOP v Go je viac decentralizovaný a zameraný na správanie (cez rozhrania) a dátové štruktúry (cez vkladanie), čo často vedie k flexibilnejšiemu a ľahšie testovateľnému kódu. C# sa drží tradičnejšieho a hierarchického modelu.