Sobes.tech
Middle+

Palyginkite objektinio programavimo įgyvendinimą Go ir C#.

sobes.tech AI

Atsakymas iš AI

Go neturi klasikinės objektinio programavimo paveldėjimo ir klasių sampratos tradiciniu būdu. Vietoj to, Go naudoja kompoziciją ir sąsajas.

Pagrindiniai skirtumai:

  • Klasės ir objektai: C# remiasi klasėmis, iš kurių kuriami objektai. Go naudoja struktūras (structs), kurios gali turėti metodus.
  • Paveldėjimas: C# palaiko viengubo ir daugybinio (per sąsajas) paveldėjimą. Go palaiko kompoziciją (struktūrų įterpimą) ir polimorfizmą per sąsajas.
  • Sąsajos: C# sąsajos turi būti aiškiai įgyvendintos klasės. Go sąsajos įgyvendinamos neaiškiai: jei struktūra turi metodus, atitinkančius sąsajos parašą, ji automatiškai ją įgyvendina.
  • Matomumas (Access Modifiers): C# naudoja public, private, protected, internal. Go matomumas nustatomas pagal pirmojo vardo raidės didumą: didžioji raidė - vieša, mažoji - privači (pakuotės ribose).
  • Geriniai (Generics): C# turi išplėtotą generikų sistemą. Nuo versijos 1.18, Go pridėjo generikų palaikymą.

Pavyzdys su kompozicija Go:

package main

import "fmt"

type Engine struct {
	Type string
}

func (e Engine) Start() {
	fmt.Printf("%s variklis įjungtas!\n", e.Type)
}

type Car struct {
	Model string
	Engine // anoniminė įterpimas - kompozicija
}

func main() {
	myCar := Car{
		Model: "Sedanas",
		Engine: Engine{
			Type: "Benzinas",
		},
	}
	fmt.Printf("Automobilio modelis: %s\n", myCar.Model)
	myCar.Start() // iškvietimas įterptos struktūros metodo
}

Pavyzdys sąsajos įgyvendinimo Go:

package main

import "fmt"

type Speaker interface {
	Speak() string
}

type Dog struct{}

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

type Cat struct{}

func (c Cat) Speak() string {
	return "Miau!"
}

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

Lentelėje:

Bruožas Go C#
Klasės Nėra (struktūros) Taip
Objektai Struktūrų pavyzdžiai Klasės pavyzdžiai
Paveldėjimas Kompozicija, sąsajos Tradicinis (viengubas), sąsajos
Sąsajos Neaiški įgyvendinimas Aiški įgyvendinimas
Matomumas Pirmojo raidės didumas public, private, protected, ir kt.
Geriniai Nuo 1.18 versijos Taip

Go požiūris į OOP yra labiau decentralizuotas ir sutelktas į elgesį (per sąsajas) ir duomenų struktūrą (per įterpimą), kas dažnai lemia lankstesnį ir lengviau testuojamą kodą. C# laikosi tradicinės ir hierarchinės modelio.