Sobes.tech
Middle

Go тилинде объектке багытталган программалоо (OOP) түшүнүктөрү кандай ишке ашырылат?

sobes.tech AI

AIден жооп

Go тилдеринде башка тилдердегидей классикалык түшүнүктөр (кластар, мурас алуу жана виртуалдык методдор) жок. ООП төмөнкүдөй ишке ашырылат:

  • Структуралар (Structs): Маалыматтарды (тезмектерди) бириктирет.
    type Person struct {
    	Name string
    	Age  int
    }
    
  • Методдор: Функциялар менен байланышкан (структура же башка түр). Структураларга жүрүм-турумду кошууга мүмкүндүк берет.
    func (p Person) Greet() string {
    	return "Hello, my name is " + p.Name
    }
    
    • Кабыл алуучу мааниси боюнча: Метод структуранын көчүрмөсү менен иштейт. Ички өзгөртүүлөр оригинал структурага таасир этпейт.
    • Кабыл алуучу көрсөткүч аркылуу: Метод оригинал структура менен иштейт көрсөткүч аркылуу. Ички өзгөртүүлөр оригинал структурага таасир этет.
  • Интерфейстер (Interfaces): Методдордун сигнатураларын аныктайт, алардын туура келген түр. Полиморфизмди "дууктун типи" аркылуу камсыз кылат (duck typing). Түр интерфейсти имплементациялайт, эгер бардык методдорду ишке ашырса.
    type Greeter interface {
    	Greet() string
    }
    
    func SayHello(g Greeter) string {
    	return g.Greet()
    }
    
  • Встраивание (Embedding): Бир структура башка структураны же интерфейсти "встроить" кылууга мүмкүндүк берет. Бул классикалык мурас эмес, көбүрөөк композиция. Встроенная структура анонимдүү талаа болуп калат, анын талааларына жана методдоруна түздөн-түз кайрылса болот.
    type Employee struct {
    	Person // встраиваемая структура Person
    	ID string
    }
    
    // Employee азыр Name жана Age талааларына, ошондой эле Greet() методуна ээ
    
    e := Employee{
    	Person: Person{Name: "Alice", Age: 30},
    	ID:     "E123",
    }
    fmt.Println(e.Greet()) // Employee аркылуу Person структурасынын Greet() методун чакыруу
    
ООП концепциясы Go'догу ишке ашырылышы Эскертүүлөр
Класстар Структуралар class ачкыч слова жок
Инкапсуляция Экспорттолгон (большой тамгалар) / Экспорттолбогон (кичинекей тамгалар) талаалар/методдор Пакет деңгээлинде көрүнүштү башкаруу
Мурас алуу Встраивание (Embedding) Иерархиялык мурас ордуна композиция
Полиморфизм Интерфейстер Duck typing, интерфейстердин жасалма ишке ашырылышы