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 |