Creatlacha

Oibiachtaí

Go minic sa teagasc seo chonaiceamar an siombail @, anois tá sé in am caint faoi cad is brí leis. Baineadh úsáid as i sloinn cosúil le ciorcal@stáitse agus slánuimh_rand@mata. Chun na sloinn sin a thuiscint, is gá dúinn foghlaim faoi oibiachtaí.

Cad iad Oibiachtaí?

Is féidir leat smaoinigh faoi mar bhailiúchán luachanna agus iompraíochtaí. Is féidir le oibiacht aon luach is mian linn a stóráil: uimhreacha, téacs, gníomhartha srl. Tá ainm bainteach le gach ball den oibiacht, díreach mar a bhíonn ainmneacha bainteach le athróga.

Abair go raibh oibiacht againn a léiríonn duine éigin. Bheadh aois, seoladh nó ainm mar bhaill ag an oibiacht, ag stóráil aois, seoladh agus ainm faoi seach.

Is féidir iompraíochtaí speisialta a bheith ag oibiachtaí freisin, ach feicimid níos mó faoi sin níos déanaí ar an leathanach seo.

Conas a úsáidimid oibiachtaí?, ba chóir dúinn an siombail @ a úsáid!

Cad é @?

Nuair ba mhaith linn ball oibiachta a roghnú, bainimid úsáid as an tsiombail @ agus ainm an bhaill mar seo:

<ainm an bhaill>@<an oibiacht>

Samhlaigh anois go bhfuil oibiacht againn a léiríonn crann éigin san athróg crann, agus tá ball aige airde a stórálann airde an chrainn. Scríobhfaimis airde@crann chun airde an chrainn a fháil.

Nuair a scríobhaimid ciorcal@stáitse táimid ag iarraidh ar Setanta “Faigh luach an bhaill ciorcal ón oibiacht stáitse.”. Dá bhrí sin nuair a scríobhaimid ciorcal@stáitse(x, y, ga) táimid ag roghnú an gníomh ciorcal ón oibiacht stáitse agus ag glaoch air (le x, y agus ga mar athróga).

Is féidir linn an slonn ciorcal@stáitse(200, 200, 100) a scaradh ina dhá chéim chun an próiseas seo a thuiscint níos fearr. Ar dtús bainfimid úsáid as @ chun an gníomh ciorcal a roghnú, tar éis é sin glaofaimid air.

Cuirimis an gníomh ciorcal in athróg mar seo:

gníomh_ciorcal := ciorcal@stáitse

Anois is féidir linn glaoch air:

gníomh_ciorcal := ciorcal@stáitse
gníomh_ciorcal(200, 200, 100)

Bain triail as anseo:

Cruthú

Chun oibiacht a chruthú tá rud uainn ar a dtugtar creatlach. Is féidir linn creatlacha a úsáid chun oibiachtaí nua a dhéanamh. Is féidir creatlach amháin a úsáid chun a lán oibiachtaí a dhéanamh.

Mar shampla is féidir linn creatlach a chruthú a sheasann do dhuine, agus ansin is féidir linn é a úsáid chun grúpa daoine a chur le chéile ón gcreatlach sin.

Creatlacha

Cad é creatlach? Is cur síos é ar struchtúr oibiachta. Nuair a cruthaímid creatlach, sainímid ainm an creatlach agus liosta gníomhartha. Sainíonn an liosta gníomhartha seo iompraíocht na hoibiachta.

Úsáidimid an eochairfhocail creatlach chun creatlach a chruthú mar seo:

creatlach <ainm na hoibiachta> {
    <liosta gníomhartha>
}

Mar shampla: Seo creatlach Simplí a shainíonn oibiacht gan aon iompraíocht speisialta.

>-- Creatlach nua gan ghníomartha.
creatlach Simplí {
}

Cruthaíonn sé sin gníomh Simplí: Nuair a ghlaoitear ar an ngníomh sin cruthaíonn sé oibiacht ón gcreatlach. Seo sampla:

>-- Creatlach nua gan ghníomartha.
creatlach Simplí {
}

>-- Cruthaigh oibiacht ón gcreatlach.
oibiacht_simplí := Simplí()

Chruthaíomar oibiacht nua, ach is oibiacht an-simplí é gan dabht: Níl aon baill aige. Anois cuirimis ball nua ár_mball isteach san oibiacht. Déanaimid é sin díreach mar a chuirimid luach nua in athróg: leis an ráiteas =.

>-- Creatlach nua gan ghníomartha.
creatlach Simplí {
}

>-- Cruthaigh oibiacht ón gcreatlach.
oibiacht_simplí := Simplí()

>-- Cuir ball leis an oibiacht.
ár_mball@oibiacht_simplí = "Ár mball nua"

Anois tá ball ag an oibiacht. Thugamar ár_mball air agus tá an luach "Ár mball nua" aige. Is féidir é a roghnú le ár_mball@oibiacht_simplí.

>-- Creatlach nua gan ghníomartha.
creatlach Simplí {
}

>-- Cruthaigh oibiacht ón gcreatlach.
oibiacht_simplí := Simplí()

>-- Cuir ball leis an oibiacht.
ár_mball@oibiacht_simplí = "Ár mball nua"

scriobh(ár_mball@oibiacht_simplí)

Bain triail as!

Dúshlán

Athraigh an cód seo ionas go scríobhann sé “Táim <d’aois> bliana d’aois”. Mar shampla “Táim 18 bliana d’aois”.

Cliceáil anseo le haghaidh an freagra

Oibiachtaí? Cén fáth?

Ag an bpointe seo b’fhéidir go bhfuil tú ag ceapadh “Cén fáth a bhfuil oibiachtaí úsáideach? Nach bhfuil siad díreach cosúil le hathróga?”.

Smaoinigh faoi seo: Ba mhaith linn ríomhchlár a chruthú a dhéanann é seo: Ciorcal a tharraingt ar an stáitse, achar an chiorcail a scríobh agus ansin imlíne an chiorcail a scríobh.

Ar dtús, cruthóimid creatlach folamh Ciorcal agus gníomh déan_ciorcal a dhéanann oibiacht ón gcreatlach Ciorcal agus a chuireann roinnt sonraí isteach. Ba mhaith linn x comhordanáid, y comhordanáid, ga agus dath an chiorcail a thaifead san oibiacht. Cuirfimid iad sa bhaill x, y, ga agus dath.

>-- Creatlach folamh.
creatlach Ciorcal {
}

gníomh déan_ciorcal(x, y, ga, dath) {
    >-- Cruthaigh ciorcal folamh.
    c := Ciorcal()

    >-- Cuir na luachanna san oibiacht.
    x@c = x
    y@c = y
    ga@c = ga
    dath@c = dath

    >-- Tabhair an ciorcal ar ais.
    toradh c
}

Anois is féidir linn trí ghníomh a chruthú. Ceann amháin chun an ciorcal a tharraingt, ceann eile chun achar an chiorcail a ríomh agus ceann eile chun imlíne an chiorcail a ríomh. Glacfaidh gach gníomh le argóint amháin: an ciorcal.

>-- Tarraing an ciorcal.
gníomh tarraing(ciorc) {
    >-- Athraigh dath an phinn.
    dath@stáitse(dath@ciorc)

    >-- Tarraing an ciorcal leis an x comhordanáid, y comhordanáid agus an ga.
    ciorcal@stáitse(x@ciorc, y@ciorc, ga@ciorc)
}

>-- Ríomh an t-achar. (achar = pi * ga^2).
gníomh achar(ciorc) {
    toradh pi@mata * ga@ciorc * ga@ciorc
}

>-- Ríomh an t-imlíne. (imlíne = 2 * pi * ga).
gníomh imlíne(ciorc) {
    toradh 2 * pi@mata * ga@ciorc
}

Anois is féidir linn ár ngníomh a úsáid chun an ciorcal a cruthú, agus na trí ghníomh eile chun é a tharraingt agus chun a achar agus imlíne a ríomh.

c := déan_ciorcal(100, 100, 50, "dearg")
tarraing(c)
scríobh("Achar: ", achar(c))
scríobh("Imlíne: ", imlíne(c))

Bain triail as an ríomhchlár iomlán anois! Athraigh go dtí an táib “Consól” chun an achar agus an imlíne a fheiceáil.

Sa ríomhchlár sin d’úsáideamar oibiachtaí chun cód níos simplí a chruthú, d’fhéadamar athróg amháin (an oibiacht) a úsáid in ionad 4 athróg eile (x, y, ga agus dath). Ach is féidir le oibiachtaí a lán níos mó a dhéanamh.

Iompraíocht

Bhí an patrún sa chód thuas úsáideach, ach tá sé beagáinín míshlachtmhar. Conas a scríobhaimid an ríomhchlár sin i slí níos deise?

Anois féachfaimid ar iompraíocht na hoibiachta agus an liosta gníomhartha is féidir linn a scríobh sa chreatlach.

Ar dtús féachfaimid ar an ngníomh tarraing. Is féidir linn an gníomh sin a bhogadh isteach sa chreatlach Ciorcal:

>-- Creatlach folamh.
creatlach Ciorcal {

    >-- Tarraing an ciorcal.
    gníomh tarraing(ciorc) {
        >-- Athraigh dath an phinn.
        dath@stáitse(dath@ciorc)

        >-- Tarraing an ciorcal leis an x comhordanáid, y comhordanáid agus an ga.
        ciorcal@stáitse(x@ciorc, y@ciorc, ga@ciorc)
    }

}

Anois nuair a cruthaímid oibiacht ón gcreatlach Ciorcal, beidh an gníomh tarraing ina bhall. Mar shampla, ba fhéidir linn é a roghnú mar seo:

c := déan_ciorcal(100, 100, 50, "dearg")

tarraing@c

Ansin is féidir linn glaoch air mar a rinneamar roimhe:

c := déan_ciorcal(100, 100, 50, "dearg")

tarraing@c(c)

Oibríonn an cód seo, bain triail as:

Faraor, tá an líne seo an ait: tarraing@c(c). Bhí orainn c a úsáid faoi dhó. An bhfuil bealach níos fearr ann? Tá! Is féidir linn an eochairfhocail seo a úsáid chun cód níos simplí a chruthú.

Seo

Nuair a bhaineann tú úsáid as creatlach chun oibiacht a chruthú, tugaimid ásc ar an oibiacht sin. Is féidir linn a lán áisc a chruthú ó gcreatlach amháin. Nuair a roghnaíonn tú gníomh ó ásc éigin (m.sh. tarraing@c), tá an gníomh sin nasctha leis an ásc sin. Is féidir linn an eochairfhocail seo a úsáid chun sochar a bhaint as an nasc sin.

Nuair a cruthaímid gníomh i gcreatlach, (díreach mar a rinneamar le tarraing thuas) is féidir linn tagairt don ásc atá nasctha leis an gníomh tríd seo a úsáid Tá sé seo an-chasta, mar sin féachfaimid ar sampla chun na sonraí a thuiscint:

Smaoinigh faoin ghníomh tarraing arís:

>-- Creatlach folamh.
creatlach Ciorcal {
    >-- Tarraing an ciorcal.
    gníomh tarraing(ciorc) {
        >-- Athraigh dath an phinn.
        dath@stáitse(dath@ciorc)

        >-- Tarraing an ciorcal leis an x comhordanáid, y comhordanáid agus an ga.
        ciorcal@stáitse(x@ciorc, y@ciorc, ga@ciorc)
    }
}

Is féidir linn an argóint ciorc a scriosadh agus an eochairfhocail seo a úsáid ina ionad mar seo:

>-- Creatlach folamh.
creatlach Ciorcal {
    >-- Tarraing an ciorcal.
    gníomh tarraing() {
        >-- Athraigh dath an phinn.
        dath@stáitse(dath@seo)

        >-- Tarraing an ciorcal leis an x comhordanáid, y comhordanáid agus an ga.
        ciorcal@stáitse(x@seo, y@seo, ga@seo)
    }
}

Cad a tharlaíonn anois nuair a ghlaoimid ar an ngníomh sin mar seo (gan an argóint):

c := déan_ciorcal(100, 100, 50, "dearg")
tarraing@c()

Nuair a roghnaítear tarraing le tarraing@c cruthaítear nasc idir an eochairfhocail seo i gcorp an ghnímh agus an oibiacht san athróg c.

Anois nuair a ritear an gníomh, tá seo cothrom leis an oibiacht i c agus oibríonn an gníomh díreach mar a oibríonn sé nuair a bhí argóint aige.

Na Gníomhartha eile

Anois is féidir linn na gníomhartha achar agus imlíne a athrú go gníomhartha creatlaí cosúil le tarraing. Ba chóir dúinn iad a bhogadh isteach sa ráiteas creatlaí agus seo a úsáid in ionad an t-aon argóint atá acu:

>-- Creatlach folamh.
creatlach Ciorcal {
    >-- Tarraing an ciorcal.
    gníomh tarraing() {
        >-- Athraigh dath an phinn.
        dath@stáitse(dath@seo)

        >-- Tarraing an ciorcal leis an x comhordanáid, y comhordanáid agus an ga.
        ciorcal@stáitse(x@seo, y@seo, ga@seo)
    }

    >-- Ríomh an t-achar. (achar = pi * ga^2).
    gníomh achar() {
        toradh pi@mata * ga@seo * ga@seo
    }

    >-- Ríomh an t-imlíne. (imlíne = 2 * pi * ga).
    gníomh imlíne() {
        toradh 2 * pi@mata * ga@seo
    }
}

Anois is féidir linn achar@c() agus imlíne@c() a úsáid in ionad achar(c) agus imlíne(c).

c := déan_ciorcal(100, 100, 50, "dearg")
tarraing@c()
scríobh("Achar: ", achar@c())
scríobh("Imlíne: ", imlíne@c())

Bain triail as an gcód anois:

Cruthaitheoir

Anois tá gach gníomh istigh sa chreatlach Ciorcal ach an gníomh déan_ciorcal, an féidir linn an gníomh sin a athrú go gníomh creatlaí? Is féidir linn!

I ngach creatlach is féidir linn gníomh speisialta a chruthú, tugaimid cruthaitheoir ar an ngníomh sin. Glaoitear ar an ngníomh sin gach uair a chruthaítear oibiacht nua ón gcreatlach.

Chun cruthaitheoir a dhéanamh, ba chóir dúinn gníomh a chuir sa chreatlach leis an ainm nua. Ansin nuair a chruthaíonn tú oibiacht ón gcreatlach (m.sh. c := Ciorcal()), glaoitear ar an gníomh nua.

Sampla beag

Cruthaímis creatlach anois a sheasann do duine, tugaimis Duine air.

creatlach Duine {
}

Anois cuirimis cruthaitheoir isteach (gníomh nua). Glacfaidh sé le argóint amháin: ainm an úsáideora.

creatlach Duine {
    gníomh nua(ainm) {
    }
}

Anois cuirimis píosa cód isteach a scríobhann ainm an úsáideora nuair a ghlaoitear ar an gcruthaitheoir:

creatlach Duine {
    gníomh nua(ainm) {
        scríobh("Cruthaíodh duine:", ainm)
    }
}

Cruthaímis oibiacht nua anois ón gcreatlach. Caithfimid argóint a thabhairt nuair a glaoimid ar Duine() mar glacann an cruthaitheoir le argóint amháin.

creatlach Duine {
    gníomh nua(ainm) {
        scríobh("Cruthaíodh duine:", ainm)
    }
}

mise := Duine("Eoin")

Bain triail as an gcód anois. Ba chóir go feicfidh tú “Cruthaíodh duine: Eoin” ar an gconsól.

Cruthaitheoir Ciorcail

Toisc gur chonaiceamar cruthaitheoirí, is féidir linn an gníomh déan_ciorcal a scriosadh. In ionad an gníomh sin bainfimid úsáid as cruthaitheoir chun x, y, ga agus dath an ciorcail a stóráil san ásc atá á chruthú againn.

Seo é ár gcruthaitheoir:

gníomh nua(x, y, ga, dath) {
    x@seo = x
    y@seo = y
    ga@seo = ga
    dath@seo = dath
}

Cuirimis an cruthaitheoir sin sa chreatlach Ciorcal, agus scriosaimis an gníomh déan_ciorcal go hiomlán. Anois nuair ba mhaith linn ásc Ciorcal a chruthú is féidir linn an gníomh Ciorcal(x, y, ga, dath) a úsáid go díreach. Mar shampla:

c := Ciorcal(100, 100, 50, "dearg")

Anois seo é ár ríomhchlár:

Chonaiceamar anseo gur féidir linn oibiachtaí a úsáid chun cód níos deise a scríobh, ach tá siad i bhfad níos cumhachtaí ná sin fós!

Oidhreacht

I Setanta, is féidir le creatlach amháin iompraíocht a fháil le hoidhreacht ó chreatlach eile. Cad is brí le sin? Is féidir linn creatlach “tuismitheoir” a chruthú, agus roinnt creatlacha “páiste”; Ansin beidh gach gníomh creatlaí atá ag an tuismitheoir-creatlaigh ag gach páiste-creatlach freisin. (Is féidir linn “for-creatlach” agus “fo-creatlach” a thabhairt ar na gcreatlacha sin freisin.)

Tá sé a lán níos soiléire le sampla:

Sampla

Féach anois ar an gcreatlach seo:

creatlach Ainmhí {
    gníomh bog() {
        scríobh("Táim ag bogadh")
    }
}

Níl ach gníomh amháin aige (bog) agus nuair a ghlaoitear air, scríobhann sé “Táim ag bogadh” ar an gconsól.

Anois cruthaímis creatlach nua Madra atá ina pháiste-creatlach do Ainmhí. Úsáidimid an eochairfhocail ó chun é sin a dhéanamh.

creatlach Ainmhí {
    gníomh bog() {
        scríobh("Táim ag bogadh")
    }
}

creatlach Madra ó Ainmhí {
}

Níl aon iompraíocht ag Madra go díreach, ach toisc go bhfuil sé ina pháiste d’Ainmhí, faigheann sé an gníomh bog le hoidhreacht. Chun é sin a fheiceáil cruthaímis ásc Madra agus glaoimid ar bog leis.

creatlach Ainmhí {
    gníomh bog() {
        scríobh("Táim ag bogadh")
    }
}

creatlach Madra ó Ainmhí {
}

m := Madra()
bog@m()

Bain triail as:

Ba chóir go bhfaca tú “Táim ag bogadh” ar an gconsól.

Is féidir linn gníomhartha a chuir sa chreatlach Madra go díreach freisin, mar seo:

creatlach Ainmhí {
    gníomh bog() {
        scríobh("Táim ag bogadh")
    }
}

creatlach Madra ó Ainmhí {
    gníomh ith() {
        scríobh("Is aoibhinn liom ispíní")
    }
}

m := Madra()
bog@m()

Anois scríobhann ith@m() “Is aoibhinn liom ispíní” ar an gconsól. Táimid in ann páiste-creatlach eile a chruthú ó Ainmhí arís:

creatlach Ainmhí {
    gníomh bog() {
        scríobh("Táim ag bogadh")
    }
}

creatlach Madra ó Ainmhí {
}

creatlach Cat ó Ainmhí {
}

m := Madra()
bog@m()

c := Cat()
bog@c()

Tá an gníomh bog ag an gcat freisin, bain triail as an gcód:

Is féidir linn oidhreacht a úsáid chun gníomhartha a roinnt le go leor creatlacha, nach bhfuil sé sin an-úsáideach!

tuis

Tá eochairfhocail eile ag Setanta, tuis. Is féidir linn tuis a úsáid chun gníomhartha an tuismitheoir-creatlaigh a roghnú.

Smaoinigh faoin gcód seo:

Tá creatlach sa ríomhchlár sin a shainíonn cáca simplí agus tá gníomh aige chun comhábhair an cáca a fháil.

Samhlaigh anois go bhfuil saghas cáca eile againn: Cáca líomóide; Tá comhábhair an cáca seo díreach mar an gcéanna ach teastaíonn líomóid uainn freisin. Conas a léirímid é sin sa ríomhchlár? Is féidir linn creatlach nua a chruthú le gníomh eile chun an liosta nua a fháil mar seo:

creatlach Cáca {
    gníomh comhábhair() {
        toradh ["ubh", "plúr", "siúcra", "im"]
    }
}

creatlach CácaLíomóide {
    gníomh comhábhair() {
        toradh ["ubh", "plúr", "siúcra", "im", "líomóid"]
    }
}

c := Cáca()
scríobh("Is iad", comhábhair@c(), "comhábhair cáca")

cl := CácaLíomóide()
scríobh("Is iad", comhábhair@cl(), "comhábhair cáca líomóide")

Oibríonn an cód sin ach bhí orainn an liosta iomlán a scríobh faoi dhó, an féidir linn oidhreacht a úsáid chun cód níos fearr a scríobh? Is féidir!

Féach ar an gcód seo:

creatlach Cáca {
    gníomh comhábhair() {
        toradh ["ubh", "plúr", "siúcra", "im"]
    }
}

creatlach CácaLíomóide ó Cáca {
    gníomh comhábhair_líomóid() {
        eile := comhábhair@seo()
        toradh eile + ["líomóid"]
    }
}

c := Cáca()
scríobh("Is iad", comhábhair@c(), "comhábhair cáca")

cl := CácaLíomóide()
scríobh("Is iad", comhábhair_líomóid@cl(), "comhábhair cáca líomóide")

D’athraíomar ainm an gnímh agus bhaineamar úsáid as oidhreacht chun comhábhair an cáca simplí a fháil. Oibríonn an cód sin freisin, bain triail as:

Fós áfach níl mé sásta leis an cód sin mar bhí orainn ainm an gnímh a athrú, an féidir linn é a dhéanamh gan ainm an gnímh a athrú?

Is féidir linn tuis a úsáid chun é sin a dhéanamh. Úsáideann tú tuis díreach mar a úsáideann tú seo ach tá gníomhartha an tuismitheoir-creatlaigh aige; níl gníomhartha an páiste-creatlach aige. Dá bhrí sin is féidir linn an t-ainm céanna a úsáid mar táimid in ann tuis a úsáid chun an gníomh sa chreatlach Cáca a roghnú.

Seo é ár gcód nua:

creatlach Cáca {
    gníomh comhábhair() {
        toradh ["ubh", "plúr", "siúcra", "im"]
    }
}

creatlach CácaLíomóide ó Cáca {
    gníomh comhábhair() {
        eile := comhábhair@tuis()
        toradh eile + ["líomóid"]
    }
}

c := Cáca()
scríobh("Is iad", comhábhair@c(), "comhábhair cáca")

cl := CácaLíomóide()
scríobh("Is iad", comhábhair@cl(), "comhábhair cáca líomóide")

Bain triail as!