Sobes.tech
Middle

Cum sunt implementate conceptele de programare orientată pe obiecte (OOP) în limbajul Go?

sobes.tech AI

Răspuns de la AI

În Go, nu există concepte clasice pentru alte limbaje (Java, C++) precum clase, moștenire și metode virtuale. Programarea orientată pe obiecte se realizează prin:

  • Structuri (Structs): Grupează date (câmpuri).
    type Person struct {
    	Name string
    	Age  int
    }
    
  • Metode: Funcții cu un receptor asociat (structură sau alt tip). Permite structurilor să aibă comportament.
    func (p Person) Greet() string {
    	return "Hello, my name is " + p.Name
    }
    
    • Receptor pe valoare: Metoda lucrează cu o copie a structurii. Modificările din metodă nu afectează structura originală.
    • Receptor pe pointer: Metoda lucrează cu structura originală printr-un pointer. Modificările din metodă afectează structura originală.
  • Interfețe: Definirea unui set de semnături de metode pe care trebuie să le implementeze un tip. Oferă polimorfism "după tipul de rață" (duck typing). Un tip implementează implicit o interfață dacă implementează toate metodele sale.
    type Greeter interface {
    	Greet() string
    }
    
    func SayHello(g Greeter) string {
    	return g.Greet()
    }
    
  • Incorporare (Embedding): Permite unei structuri să "încorporeze" o altă structură sau interfață. Nu este moștenire în sensul clasic, ci mai degrabă compoziție. Structura încorporată devine un câmp anonim, iar câmpurile și metodele sale pot fi accesate direct prin instanța structurii care o încorporează.
    type Employee struct {
    	Person // structură încorporată
    	ID string
    }
    
    // Employee are acum câmpurile Name și Age, precum și metoda Greet()
    
    e := Employee{
    	Person: Person{Name: "Alice", Age: 30},
    	ID:     "E123",
    }
    fmt.Println(e.Greet()) // apelarea metodei Greet() a structurii Person prin Employee
    
Conceptul OOP Implementarea în Go Observații
Clase Structuri Nu există cuvântul cheie class explicit
Încapsulare Câmpuri/metode exportate (cu majusculă) / neexportate (cu minuscule) Controlul vizibilității la nivel de pachet
Moștenire Încorporare (Embedding) Compoziție în loc de moștenire ierarhică
Polimorfism Interfețe Duck typing, implementare implicită a interfețelor