Middle
Go tilida ob'ektga yo'naltirilgan dasturlash (OOP) konseptlari qanday amalga oshiriladi?
sobes.tech AI
AIdan javob
Go'da boshqa tillarda (Java, C++) keng tarqalgan klasslar, meros va virtual metodlar kabi an'anaviy tushunchalar mavjud emas. Ob'ektga yo'naltirilgan dasturlash quyidagi usullar bilan amalga oshiriladi:
- Strukturalar (Structs): Ma'lumotlarni (maydonlarni) guruhlaydi.
type Person struct { Name string Age int } - Metodlar: Birga bog'langan qabul qiluvchi (struktur yoki boshqa tur). Strukturalarga xususiyatlar qo'shishga imkon beradi.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Qabul qiluvchi qiymat bilan: Metod strukturaning nusxasi bilan ishlaydi. Ichki o'zgarishlar asl struktura ta'sir qilmaydi.
- Qabul qiluvchi ko'rsatkich bilan: Metod asl struktura orqali ko'rsatkich bilan ishlaydi. Ichki o'zgarishlar asl struktura ta'sir qiladi.
- Interfeyslar: Bir tur uchun metodlar imzolarining to'plamini belgilaydi. "O'rdak tipini" (
duck typing) orqali polimorfizmni ta'minlaydi. Bir tur, agar uning barcha metodlarini amalga oshirsa, interfeysni amalga oshiradi.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Qayta joylashtirish (Embedding): Bir struktura boshqa struktura yoki interfeysni "joylashtirish" imkonini beradi. Bu an'anaviy meros emas, balki kompozitsiya. Joylashtirilgan struktura nomsiz maydon bo'lib, uning maydonlari va metodlariga to'g'ridan-to'g'ri murojaat qilish mumkin.
type Employee struct { Person // joylashtirilgan struktura ID string } // Employee endi Name va Age maydonlariga ega va Greet() metodini chaqirish mumkin e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // Personning Greet() metodini Employee orqali chaqirish
| OOP Kontseptsiyasi | Go'da amalga oshirilishi | Izohlar |
|---|---|---|
| Klasslar | Structs | Aniq class kalit so'zi mavjud emas |
| Inkapsulyatsiya | Eksport qilinadigan (katta harf bilan boshlanadi) / eksport qilinmaydigan (kichik harf bilan boshlanadi) maydonlar/metodlar | Paket darajasida ko'rinishni boshqarish |
| Meros | Embedding | Hierarxik meros o'rniga kompozitsiya |
| Polimorfizm | Interfeyslar | Duck typing, interfeyslarning noaniq amalga oshirilishi |