Middle
Ինչպես են Go լեզվում իրականացվում օբյեկտային ուղղված ծրագրավորման (OOP) կոնցեպցիաները։
sobes.tech AI
Պատասխան AI-ից
Go-ում չկա դասական հասկացություններ՝ դասեր, ժառանգություն և վիրտուալ մեթոդներ, որոնք բնորոշ են այլ լեզուներին (Java, C++): ՕՕՊ-ը իրականացնում է հետևյալ կերպ.
- Կառուցվածքներ (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()) // вызов метода Greet() структуры Person через Employee
| ՕՕՊ կոնցեպտ | Գործարկում Go-ում | Նշումներ |
|---|---|---|
| Դասեր | Կառուցվածքներ | Չկա հստակ class բառը |
| Էնկապսուլյացիա | Արտաքին (մեծատառով) / Անարտաքին (փոքրատառով) դաշտեր/մեթոդներ | Կատարման կառավարում փաթեթի մակարդակով |
| ժառանգություն | Ներքին (Embedding) | Կոմպոզիցիա՝ փոխարենը ժառանգության |
| Պոլիմորֆիզմ | Ինտերֆեյսներ | Duck typing, անորոշ ինտերֆեյսների իրականացում |