Objektorienteeritud programmeerimine (OOP) on programmeerimisparadigma, mis põhineb objektidel kui kesksel kontseptsioonil. OOP-is vormindatakse kood funktsionaalsuse alusel, võimaldades koodi hooldust, abstraktsiooni, korduvkasutatavust, tõhusust ja paljusid funktsioone objektil.

Objektil on atribuudid (muutujad), mis määratlevad selle omadused, omadused ja meetodid (funktsioonid), mis määratlevad objekti tegevused (protseduurid) ja käitumise.

Go objektorienteeritud programmeerimine erineb teistest keeltest. Objektorienteeritud kontseptsioone rakendatakse Go-s struktuuride, liideste ja kohandatud tüüpide abil.

Tüüpide kohandamine Go-s

Kohandatud tüübid hõlbustavad sarnaste koodide rühmitamist ja tuvastamist korduskasutamiseks.

Kohandatud tüüpide deklareerimise kood on:

tüüp tüüpNimi andmetüüp 

Kohandatud tüübi loomisel ja muutuja määramisel saate tüüpi kontrollida kasutades peegeldama. Tüüp() mis võtab sisse muutuja ja tagastab muutuja tüübi.

importida("fmt"
"peegeldama")
tüüp kaks int// loob tüübi "kaks"
var number kaks // "kaks" tüüpi muutuja
fmt. Println (peegelda. TypeOf (arv))
instagram viewer

​​​

The number muutuja on teatud tüüpi kaks mis on täisarv. Kohandatud tüübi loomiseks võite minna kaugemale.

Struktuuride loomine Go's

Struktuurid (struktuurid) on Go objektorienteeritud programmeerimise kavandid. Struktuurid on kasutaja määratud väljade kogumid.

Struktuur võib sisaldada mitmesuguseid andmetüüpe, sealhulgas liittüüpe ja meetodeid.

Struktuuri saate luua järgmise süntaksi abil:

tüüp Struktuurinimi struktuur {
// mingi kood
}

Tavaliselt kirjutatakse struktuurinimed loetavuse huvides tavaliselt suurtähtedega ja kaameli tähega.

Struktuuritüüp võtab sisse väljade nimed ja andmetüübid. Struktuurid võivad võtta mis tahes Go andmetüüpe, sealhulgas kohandatud tüüpe.

tüüp Kasutaja struktuur {
väli1 string
väli2 int
välikaart kaart[string]int
}

Struktuuri tüübi saab luua, määrates struktuuri muutujaks.

näide := Kasutaja{
// mingi kood
}

Struktuuri eksemplari saab täita initsialiseerimisel määratletud väljadega või määrata nulliks.

näide := Kasutaja{
väli1: "a string väli",
väli2: 10,
välikaart: kaart[string]int{},
}

Juurdepääs struktuurielementidele

Struktuuri eksemplari väljadele pääsete juurde, kasutades väljale punktimärki.

fmt. Println("Juurdepääs väärtusväljale", näide.väli2)

See annab väljundi väli2 instantseeritud struktuuri eksemplarist.

Struktuuridele meetodite määramine

Funktsioonid (meetodid) määratakse struktuuritüüpidele, määrates vastuvõtja nime ja struktuuri nime enne funktsiooni nime, nagu on näidatud allolevas süntaksis.

func(vastuvõtja struktuurinimi)funktsiooniNimi() {
// mingi kood
}

Meetod funktsiooniNimi saab kasutada ainult määratud struktuuritüübi puhul.

Pärandi rakendamine Go-s

Pärand on objektide ja tüüpide võime pääseda juurde ning kasutada teiste objektide meetodeid ja atribuute. Go ei oma funktsioonina pärimist, kuid saate kasutada kompositsioone. Go-s tähendab kompositsioon allstruktuuris superstruktuurile (päritavale struktuurile) viitamist, andes alamstruktuurile superstruktuuri nime.

Kasutades ülaltoodud struktuuri näidet:

tüüp Kasutaja struktuur {
väli1 string
väli2 int
välikaart kaart[string]int
}
tüüp Kasutaja2 struktuur {
Kasutaja
}

Möödudes Kasutaja struktuuri nimi sisse Kasutaja2 struktuur, Kasutaja2 struct pääseb juurde kõikidele meetoditele ja atribuutidele Kasutaja struct on instantiatsioon, välja arvatud abstraktsioonitehnikad.

poeg := Kasutaja2{
kasutaja{
väli1: "beebi",
väli2: 0,
välikaart: null,
},
}
fmt. Println (son.field2)

The poeg ülaltoodud muutuja on instantseering Kasutaja2 struktuur. Nagu näites näha, poeg muutuja pääseb ligi ja loob kasutaja tüüpi väärtusi ning kasutab neid.

Tüübiväljade kapseldamine Go-s

Kapseldamine, tuntud ka kui "teabe peitmine", on a tehnika objekti meetodite ja atribuutide ühikuteks ühendamiseks kasutamise ja juurdepääsu piiramiseks, välja arvatud täpsustatud (lugemis-/kirjutamisõigused).

Kapseldamine on Go-s rakendatud, kasutades pakettides eksporditud ja eksportimata identifikaatoreid.

Eksporditud identifikaatorid (lugemine ja kirjutamine)

Eksporditud identifikaatorid eksporditakse nende määratletud pakettidest ja juurdepääsust teistele programmidele. Välja identifikaatori suurtähtede kasutamine ekspordib välja fo.

tüüp Kasutaja struktuur {
Väli 1 string
2. väli int
FieldMap kaart[string]int
}
tüüp Kasutaja2 struktuur {
Kasutaja
}

Eksportimata identifikaatorid (kirjutuskaitstud)

Eksportimata identifikaatoreid määratletud paketist ei ekspordita ja need on tavapäraselt väiketähtedega.

tüüp Kasutaja struktuur {
väli1 string
väli2 int
välikaart kaart[string]int
}
tüüp Kasutaja2 struktuur {
Kasutaja
}

Eksporditud ja ekspordimata identifikaatorite mõiste kehtib ka objekti meetodite kohta.

Go polümorfism

Polümorfism on tehnika, mida kasutatakse objektile paindlikkuse tagamiseks erinevate vormide andmiseks.

Go rakendab polümorfismi liideste abil. Liidesed on kohandatud tüübid, mida kasutatakse meetodi allkirjade määratlemiseks.

Liideste deklareerimine

Liideste deklareerimine on sarnane struktuuride deklareerimisega. Liidesed deklareeritakse aga kasutades liides märksõna.

tüüp Liidese nimi liides{
//mõned meetodid
}

Liidese deklaratsioonid sisaldavad meetodeid, mida rakendatakse struktuuritüüpide kaupa.

Liideste rakendamine struktuurides

Liidest rakendavad tüübid tuleb deklareerida, mille järel tüübi meetodid liidest realiseerivad.

// Liides
tüüp Värv liides{
Paint () string
}
// Struktuuride deklareerimine
tüüp Roheline struktuur {
// mingi struktuuri spetsiifiline kood
}
tüüp Sinine struktuur {
// mingi konkreetne kood
}

Ülaltoodud koodilõigul on a Värv liides, mis on deklareeritud a-ga Värvida poolt rakendatav meetod Roheline ja Sinine struktuuri tüübid.

Liidesed realiseeritakse, määrates struktuuritüüpidele meetodid ja seejärel nimetades meetodi rakendatava liidese meetodi järgi.

func(g roheline)Värvida()string {
tagasi "roheliseks värvitud"
}
func(b Sinine)Värvida()string {
tagasi "siniseks värvitud"
}

Värvimismeetodit rakendavad rohelised ja sinised tüübid, mis saavad nüüd kutsuda ja kasutada Värvida meetod.

pintsel := roheline{}
fmt. Println (pintsel. Värv ())

Konsoolile prinditakse "Roheliseks värvitud", kinnitades, et liides on edukalt rakendatud.

Väljade abstraktsioon Go-s

Abstraktsioon on tüübi ebaoluliste meetodite ja atribuutide peitmise protsess, mis hõlbustab programmi osade kaitsmist ebatavalise ja soovimatu kasutamise eest.

Go ei rakenda koheselt abstraktsiooni; Siiski saate liideste abil abstraktsiooni rakendada.

// inimesed oskavad joosta
tüüp Inimene liides {
jooksma () string
}
// Poiss on jalgadega inimene
tüüp Poiss struktuur {
Jalad string
}
// poisil olev meetod rakendab inimliidese käitamismeetodit
func(h poiss)jooksma()string {
tagasi h. Jalad
}

Ülaltoodud kood loob a Inimene liides a jooksma liides, mis tagastab stringi. The Poiss tüüp rakendab jooksma meetod Inimene liides ja tagastab käivitamisel stringi.

Üks abstraktsiooni rakendamise viise on panna struktuur pärima liidese, mille meetodeid abstraktselt võetakse. On palju muid lähenemisviise, kuid see on kõige lihtsam.

tüüp Isik struktuur {
Nimi string
Vanus int
Inimese staatus
}
funcpeamine() {
isik1 := &Poiss{Jalad: "kaks jalga"}
isik2 := &isik{ // isiku näide
Nimi: "amina",
Vanus: 19,
Staatus: isik1,
}
fmt. Println (isik. Status.run())
}

The Isik struktuur pärib Inimene liides ja pääseb muutuja abil juurde kõigile selle meetoditele Olek liidese pärimine.

Eksemplari viitega (kasutades osutit) eksemplar Isik struktuur Isik 2 viitab eksemplarile Poiss struktuur Isik 1 ja saab juurdepääsu meetoditele.

Nii saate määrata konkreetsed meetodid, mida tüübi järgi rakendada.

OOP vs funktsionaalne programmeerimine

Objektorienteeritud programmeerimine on oluline paradigma, kuna see annab teile rohkem kontrolli oma programmi üle ja soodustab koodi taaskasutamist viisil, mida funktsionaalne programmeerimine seda ei tee.

See ei muuda funktsionaalset programmeerimist halvaks valikuks, kuna funktsionaalne programmeerimine võib mõnel juhul olla kasulik ja parem.

Mis on objektorienteeritud programmeerimine? Põhitõed, mida on seletatud tavaliste mõistetega

Loe edasi

JagaSäutsJagaMeil

Seotud teemad

  • Programmeerimine
  • Objektorienteeritud programmeerimine

Autori kohta

Ukeje Chukwuemeriwo headus (2 avaldatud artiklit)

Goodness on tehniline kirjanik, taustaprogrammi arendaja ja andmeanalüütik, kes lihtsustab seda põnevat valdkonda uurides erinevaid tehnoloogiateemasid.

Veel Ukeje Chukwuemeriwo Goodnessilt

Liituge meie uudiskirjaga

Liituge meie uudiskirjaga tehniliste näpunäidete, arvustuste, tasuta e-raamatute ja eksklusiivsete pakkumiste saamiseks!

Tellimiseks klõpsake siin