Sobes.tech
Middle+

Compara implementarea programării orientate pe obiect în Go și C#.

sobes.tech AI

Răspuns de la AI

În Go nu există moștenire orientată pe obiecte clasică și nici clase în sensul tradițional. În schimb, Go folosește compoziție și interfețe.

Principalele diferențe:

  • Clase și obiecte: C# se bazează pe clase, din care se creează obiecte. Go folosește structuri (structs), care pot avea metode.
  • Moștenire: C# suportă moștenire simplă și multiplă (prin interfețe). Go suportă compoziție (încorporarea structurilor) și polimorfism prin interfețe.
  • Interfețe: În C#, interfețele trebuie implementate explicit de către clasă. În Go, interfețele sunt implementate implicit: dacă o structură are metode care corespund semnăturii interfeței, o implementează automat.
  • Vizibilitate (Modificatori de acces): În C# se folosesc public, private, protected, internal. În Go, vizibilitatea este determinată de prima literă a numelui: majusculă, public; minusculă, privat (în cadrul pachetului).
  • Generice: C# are un sistem avansat de generice. Go a adăugat suport pentru generice începând cu versiunea 1.18.

Exemplu de compoziție în Go:

package main

import "fmt"

type Engine struct {
	Type string
}

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

type Car struct {
	Model string
	Engine // Încorporare anonimă - compoziție
}

func main() {
	myCar := Car{
		Model: "Sedan",
		Engine: Engine{
			Type: "Benzină",
		},
	}
	fmt.Printf("Modelul mașinii: %s\n", myCar.Model)
	myCar.Start() // Apelarea metodei structurii încorporate
}

Exemplu de implementare a unei interfețe în Go:

package main

import "fmt"

type Speaker interface {
	Speak() string
}

type Dog struct{}

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

type Cat struct{}

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

func main() {
	animals := []Speaker{Dog{}, Cat{}} // Lista de tipuri care implementează interfața Speaker
	for _, animal := range animals {
		fmt.Println(animal.Speak())
	}
}

În tabel:

Caracteristică Go C#
Clase Nu (structuri) Da
Obiecte Instanțe de structuri Instanțe de clase
Moștenire Compoziție, interfețe Clasic (simplu), interfețe
Interfețe Implementare implicită Implementare explicită
Vizibilitate Prima literă majusculă public, private, protected, etc.
Generice Din versiunea 1.18 Da

Abordarea Go pentru OOP este mai descentralizată și axată pe comportament (prin interfețe) și structură de date (prin încorporare), ceea ce duce adesea la cod mai flexibil și mai ușor de testat. C# urmează un model mai tradițional și ierarhic.