Sobes.tech
Back to questions
Middle
4

Какие принципы ООП есть и как они реализуются в Go?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

В Go нет классической реализации ООП, как в Java или C++, но основные принципы ООП реализуются через другие механизмы:

  1. Инкапсуляция — достигается с помощью видимости идентификаторов: экспортируемые (с заглавной буквы) и неэкспортируемые (с маленькой). Таким образом можно скрыть внутренние детали реализации пакета.

  2. Наследование — в Go нет наследования классов, но есть композиция через встраивание структур (embedding). Это позволяет расширять функциональность, встраивая одну структуру в другую.

  3. Полиморфизм — реализуется через интерфейсы. Любой тип, реализующий методы интерфейса, автоматически удовлетворяет этому интерфейсу, что позволяет писать обобщённый код.

  4. Абстракция — достигается через интерфейсы, которые описывают поведение без указания конкретной реализации.

Пример интерфейса и композиции:

package main
import "fmt"

type Speaker interface {
    Speak() string
}

type Person struct {
    Name string
}

func (p Person) Speak() string {
    return "Hello, my name is " + p.Name
}

type Robot struct {
    Person // встраивание
    Model string
}

func (r Robot) Speak() string {
    return "Beep boop, I am model " + r.Model
}

func greet(s Speaker) {
    fmt.Println(s.Speak())
}

func main() {
    p := Person{Name: "Alice"}
    r := Robot{Person: Person{Name: "R2D2"}, Model: "R2"}
    greet(p)
    greet(r)
}

Таким образом, Go поддерживает основные концепции ООП, но делает это через композицию и интерфейсы, а не через классы и наследование.