Sobes.tech
Middle+

Võrrelge objektorienteeritud programmeerimise rakendamist Go ja C#-s.

sobes.tech AI

Vastus AI-lt

Go-s ei ole klassikalist objektiivse programmeerimise pärandamise ja klasside mõistet traditsioonilises mõttes. Selle asemel kasutab Go kompositsiooni ja liideseid.

Peamised erinevused:

  • Klassid ja objektid: C# põhineb klassidel, millest luuakse objekte. Go kasutab struktuure (structs), millele saab määrata meetodeid.
  • Pärandamine: C# toetab ühe- ja mitmepoolset (liideste kaudu) pärandamist. Go toetab kompositsiooni (struktuuride sisestamist) ja polümorfismi liideste kaudu.
  • Liideseid: C#-s peavad liidesed olema klassi poolt selgelt rakendatud. Go-s rakendatakse liideseid mittevaikimisi: kui struktuuril on sobivad meetodid, rakendab see automaatselt selle liidese.
  • Nähtavus (Access Modifiers): C#-s kasutatakse public, private, protected, internal. Go-s määrab nähtavuse esimese tähe suurus: suur täht - avalik, väike täht - privaatne (paketi piires).
  • Genereerimine: C#-l on arenenud generikate süsteem. Alates versioonist 1.18 on Go-l toetatud generikad.

Näide kompositsioonist Go-s:

package main

import "fmt"

type Engine struct {
	Type string
}

func (e Engine) Start() {
	fmt.Printf("%s mootor käivitus!\n", e.Type)
}

type Car struct {
	Model string
	Engine // anonüümne sisestus - kompositsioon
}

func main() {
	myCar := Car{
		Model: "Sedan",
		Engine: Engine{
			Type: "Bensiin",
		},
	}
	fmt.Printf("Auto mudel: %s\n", myCar.Model)
	myCar.Start() // kutsuda sisestatud struktuuri meetod
}

Liidese rakendamise näide Go-s:

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 "Miau!"
}

func main() {
	animals := []Speaker{Dog{}, Cat{}}
	for _, animal := range animals {
		fmt.Println(animal.Speak())
	}
}

Tabelis:

Omadus Go C#
Klassid Ei (struktuurid) Jah
Objektid Struktuuride näited Klasside näited
Pärandamine Kompositsioon, liidesed Klassikaline (ühekordne), liidesed
Liidesed Kaudne rakendamine Otsene rakendamine
Nähtavus Esimese tähe suurus public, private, protected, jms.
Genereerimine Alates versioonist 1.18 Jah

Go lähenemine OOP-ile on rohkem decentraliseeritud ja keskendub käitumisele (liideste kaudu) ning andmestruktuurile (sisestamise kaudu), mis sageli viib paindlikuma ja kergemini testitava koodini. C# järgib traditsioonilisemat ja hierarhilisemat mudelit.