Objektinis programavimas (OOP) yra programavimo paradigma, pagrįsta objektais kaip pagrindine koncepcija. OOP kodas suformatuojamas pagal funkcionalumą, leidžiantį išlaikyti kodą, abstrakciją, pakartotinį naudojimą, efektyvumą ir daugybę objekto funkcijų.
Objektas turi atributus (kintamuosius), kurie apibrėžia jo charakteristikas, savybes ir metodus (funkcijas), kurie apibrėžia objekto veiksmus (procedūras) ir elgesį.
Objektinis programavimas Go skiriasi nuo kitų kalbų. Į objektus orientuotos koncepcijos įdiegtos „Go“, naudojant struktūras, sąsajas ir pasirinktinius tipus.
„Go“ tipų tinkinimas
Pasirinktiniai tipai leidžia lengvai grupuoti ir identifikuoti panašų kodą pakartotiniam naudojimui.
Pasirinktinių tipų deklaravimo kodas yra:
tipo typeName dataType
Kurdami pasirinktinį tipą ir priskirdami kintamąjį, galite patikrinti tipą naudodami atspindėti. Tipas() kuri paima kintamąjį ir grąžina kintamojo tipą.
importuoti("fmt"
„atspindėti“)
tipo du tarpt// sukuria tipą "du"
var Antras numeris // "dviejų" tipo kintamasis
fmt. Println (atspindi. TypeOf (skaičius))
The numerį kintamasis yra tipas du kuris yra sveikasis skaičius. Galite eiti toliau, kad sukurtumėte daugiau tinkinto tipo.
Struktūrų kūrimas „Go“.
Struktūros (struktūros) yra objektinio programavimo Go brėžiniai. Struktūros yra vartotojo nustatytos laukų rinkiniai.
Struktūroje gali būti įvairių tipų duomenų, įskaitant sudėtinius tipus ir metodus.
Galite sukurti struktūrą naudodami šią sintaksę:
tipo Struktūros pavadinimas struktūra {
// kažkoks kodas
}
Paprastai struktūrų pavadinimai paprastai rašomi didžiosiomis raidėmis ir kupranugariais, kad būtų lengviau skaityti.
Struktūros tipas paima laukų pavadinimus ir duomenų tipus. Struktūros gali būti bet kokio tipo „Go“ duomenų, įskaitant tinkintus tipus.
tipo Vartotojas struktūra {
laukas1 styga
laukas2 tarpt
lauko žemėlapis žemėlapį[styga]tarpt
}
Galite sukurti struktūros tipą, priskirdami struktūrą kaip kintamąjį.
pavyzdys := Vartotojas{
// kažkoks kodas
}
Struktūros egzempliorius gali būti užpildytas laukais, susijusiais su egzemplioriumi, kaip apibrėžta inicijuojant, arba nustatyti į nulį.
pavyzdys := Vartotojas{
1 laukas: „a styga laukas“,
2 laukas: 10,
lauko žemėlapis: žemėlapį[styga]tarpt{},
}
Prieiga prie struktūrinių elementų
Struktūros egzemplioriaus laukus galite pasiekti naudodami lauko tašką.
fmt. Println("Prieiga prie vertės lauko", pavyzdys.laukas2)
Tai išveda laukas2 struktūrinio egzemplioriaus.
Metodų priskyrimas struktūroms
Funkcijos (metodai) priskiriamos struktūrų tipams nurodant imtuvo pavadinimą ir struktūros pavadinimą prieš funkcijos pavadinimą, kaip parodyta toliau pateiktoje sintaksėje.
func(imtuvo struktūros pavadinimas)funkcijos pavadinimas() {
// kažkoks kodas
}
Metodas funkcijos pavadinimas gali būti naudojamas tik nurodytam struktūros tipui.
Paveldėjimo diegimas „Go“.
Paveldėjimas yra objektų ir tipų galimybė pasiekti ir naudoti kitų objektų metodus ir atributus. „Go“ neturi paveldėjimo funkcijos, tačiau galite naudoti kompozicijas. Go, kompozicija reiškia nuorodą į antstatą (paveldimą struktūrą) postruktūryje, suteikiant antstato pavadinimą postruktūriui.
Naudojant aukščiau pateiktą struktūros pavyzdį:
tipo Vartotojas struktūra {
laukas1 styga
laukas2 tarpt
lauko žemėlapis žemėlapį[styga]tarpt
}
tipo Vartotojas2 struktūra {
Vartotojas
}
Pravažiuojant Vartotojas struktūros pavadinimą į Vartotojas2 struktūra, Vartotojas2 struct gali pasiekti visus metodus ir atributus Vartotojas struktūroje, išskyrus abstrakcijos metodus.
sūnus := User2{
Vartotojas{
1 laukas: "kūdikis",
2 laukas: 0,
lauko žemėlapis: nulis,
},
}
fmt. Println (son.field2)
The sūnus kintamasis aukščiau yra egzempliorius Vartotojas2 struktūra. Kaip matyti pavyzdyje, sūnus kintamasis gali pasiekti ir sukurti vartotojo tipo reikšmes ir jas naudoti.
Tipo laukų inkapsuliavimas programoje „Go“.
Inkapsuliavimas, taip pat žinomas kaip „informacijos slėpimas“, yra a objekto metodų ir atributų sujungimo į vienetus technika apriboti naudojimą ir prieigą, išskyrus nurodytą (įgalinti skaitymo / rašymo teises).
Inkapsuliavimas įdiegtas Go naudojant eksportuotus ir neeksportuotus identifikatorius paketuose.
Eksportuoti identifikatoriai (skaityti ir rašyti)
Eksportuoti identifikatoriai eksportuojami iš jų apibrėžtų paketų ir prieigos prie kitų programų. Lauko identifikatoriaus rašymas didžiosiomis raidėmis eksportuoja lauką fo.
tipo Vartotojas struktūra {
1 laukas styga
2 laukas tarpt
Lauko žemėlapis žemėlapį[styga]tarpt
}
tipo Vartotojas2 struktūra {
Vartotojas
}
Neeksportuoti identifikatoriai (tik skaitomi)
Neeksportuoti identifikatoriai neeksportuojami iš apibrėžto paketo ir paprastai rašomi mažosiomis raidėmis.
tipo Vartotojas struktūra {
laukas1 styga
laukas2 tarpt
lauko žemėlapis žemėlapį[styga]tarpt
}
tipo Vartotojas2 struktūra {
Vartotojas
}
Eksportuotų ir neeksportuotų identifikatorių sąvoka taip pat taikoma objekto metodams.
Polimorfizmas Go
Polimorfizmas yra metodas, naudojamas įvairioms formoms suteikti objektui lankstumui.
Go įgyvendina polimorfizmą naudodamas sąsajas. Sąsajos yra pasirinktiniai tipai, naudojami metodo parašams apibrėžti.
Sąsajų deklaravimas
Sąsajų deklaravimas yra panašus į struktūrų deklaravimą. Tačiau sąsajos deklaruojamos naudojant sąsaja raktažodį.
tipo Sąsajos pavadinimas sąsaja{
//kai kurie metodai
}
Sąsajos deklaracijose yra metodai, kuriuos turi įgyvendinti struktūrų tipai.
Sąsajų diegimas struktūrose
Turi būti deklaruojami tipai, kurie įgyvendina sąsają, o po to tipo metodai įgyvendina sąsają.
// Sąsaja
tipo Spalva sąsaja{
Dažyti() styga
}
// Struktūrų deklaravimas
tipo Žalias struktūra {
// tam tikras struktūros kodas
}
tipo Mėlyna struktūra {
// tam tikras konkretus kodas
}
Aukščiau pateiktame kodo fragmente yra a Spalva sąsaja deklaruota su a Dažyti metodas, kurį turi įgyvendinti Žalias ir Mėlyna struktūrų tipai.
Sąsajos įgyvendinamos priskiriant metodus struktūrų tipams, o vėliau metodą įvardijant pagal sąsajos metodą, kurį reikia įgyvendinti.
func(g žalia)Dažyti()styga {
grąžinti "nudažytas žaliai"
}
func(b mėlyna)Dažyti()styga {
grąžinti "nudažytas mėlynai"
}
Dažų metodas yra įgyvendintas žaliais ir mėlynais tipais, kurie dabar gali iškviesti ir naudoti Dažyti metodas.
teptukas := žalias{}
fmt. Println (šepetys. Dažyti())
„Painted green“ atspausdinamas ant konsolės, patvirtinantis, kad sąsaja buvo sėkmingai įdiegta.
Abstrahuojantys laukai „Go“.
Abstrakcija yra nesvarbių metodų ir tipo atributų slėpimo procesas, kad būtų lengviau apsaugoti programos dalis nuo neįprasto, netyčinio naudojimo.
„Go“ abstrakcija neįdiegta iš karto; tačiau galite įgyvendinti abstrakciją naudodami sąsajas.
// žmonės gali bėgti
tipo Žmogus sąsaja {
paleisti () styga
}
// Berniukas yra žmogus su kojomis
tipo Berniukas struktūra {
Kojos styga
}
// metodas berniukui įgyvendina žmogaus sąsajos paleidimo metodą
func(h berniukas)paleisti()styga {
grąžinti h. Kojos
}
Aukščiau pateiktas kodas sukuria a Žmogus sąsaja su a paleisti sąsaja, kuri grąžina eilutę. The Berniukas tipas įgyvendina paleisti metodas Žmogus sąsają ir pateikia eilutę egzempliorių metu.
Vienas iš abstrakcijos įgyvendinimo būdų yra padaryti, kad struktūra paveldėtų sąsają, kurios metodai turi būti abstrahuojami. Yra daug kitų būdų, tačiau tai yra lengviausia.
tipo Asmuo struktūra {
vardas styga
Amžius tarpt
Žmogaus statusas
}
funcpagrindinis() {
asmuo1 := &Berniukas{Kojos: "dvi kojos"}
asmuo2 := &asmuo{ // asmens pavyzdys
Vardas: "amina",
Amžius: 19,
Būsena: asmuo1,
}
fmt. Println (asm. Status.run())
}
The Asmuo struktūra paveldi Žmogus sąsają ir gali pasiekti visus jos metodus naudodamas kintamąjį Būsena paveldi sąsają.
Atliekant egzempliorių su nuoroda (naudojant žymeklį), egzempliorius Asmuo struktūra Asmuo 2 nurodo atvejį Berniukas struktūra Asmuo1 ir gauna prieigą prie metodų.
Tokiu būdu galite nurodyti konkrečius metodus, kuriuos reikia įgyvendinti pagal tipą.
OOP prieš funkcinį programavimą
Objektinis programavimas yra svarbi paradigma, nes suteikia daugiau galimybių valdyti programą ir skatina pakartotinį kodo naudojimą taip, kaip to nedaro funkcinis programavimas.
Dėl to funkcinis programavimas nėra blogas pasirinkimas, nes funkcinis programavimas gali būti naudingas ir geresnis kai kuriais atvejais.
Kas yra objektinis programavimas? Pagrindai, paaiškinti neprofesionaliomis sąlygomis
Skaitykite toliau
Susijusios temos
- Programavimas
- Objektinis programavimas
Apie autorių
Goodness yra techninis rašytojas, užpakalinės programos kūrėjas ir duomenų analitikas, tyrinėdamas šią patrauklią sritį, supaprastinantis įvairias technologijų temas.
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!
Norėdami užsiprenumeruoti, spustelėkite čia