Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




kafli - Forritun og forritunarmįl

Islandeza


8. kafli - Forritun og forritunarmįl

Mįlskipan og merkingarfręši

Forritunarmįl og mannamįl

Forritunarmįl eru notuš eru til aš orša algrķm. Žau eru aš žvķ leyti eins og tungumįl aš hęgt er aš nota endanlegan oršaforša til aš mynda óendan­­lega margar mismunandi setningar og setningarunur. En mįl­skipan žeirra og merkingarfręši eru miklu einfaldari en ķ tungu­mįlum eins og ķslensku eša ensku.



Mįlskipan (į ensku syntax) forritunarmįls er reglur um hvernig raša mį oršum og öšrum tįknum saman ķ skipanir og heil 21121y2417v forrit. Žessar regl­ur skera śr um hvort runa af oršum og tįknum er rétt mynduš skipun (eša rétt myndaš forrit eša forritshluti) eša ekki.

Merkingarfręši (į ensku semantics) forritunarmįls er reglur um hvaša merk­ingu rétt myndašar skipanir hafa.

Til aš forritunarmįl sé nothęft žarf ķ fyrsta lagi aš vera til nothęft algrķm sem sker śr um hvort runa af tįknum er rétt mynduš eša ekki og ķ öšru lagi žarf aš vera til nothęft algrķm sem žżšir texta af forritunar­mįlinu į vélamįl einhverrar tölvu. Fyrrnefnda algrķmiš byggir į reglum um mįlskipan forritunarmįlsins og žaš seinna byggir į reglum um merk­ingar­fręši žess.   Til aš žessi algrķm séu nothęf žarf flękjutķmi žeirra aš vera innan hóflegra marka.

Žaš er įlitamįl hvort til eru algrķm sem skera śr um hvort setningar į tungumįli (eins og t.d. ķslensku eša ensku) eru rétt myndašar. Ef slķk algrķm eru til hljóta žau aš vera afar flókin. Hins vegar er ljóst aš ekki eru til reglur um merkingarfręši tungumįla sem duga til aš įkvarša merk­ingu setninga. Žetta er vegna žess aš žaš hvernig viš skiljum setn­ingar į tungu­mįlum ręšst aš nokkru leyti af ašstęšum og vitneskju sem eru utan viš sviš merkingarfręšinnar.

Sem dęmi um hvernig merking ręšst af ašstęšum getum viš tekiš setn­inguna "Žaš er hundur ķ honum". Ef męlandi horfir į mann žį getur hśn merkt aš hann sé ķ vondu skapi. En sé bent į kofa žį getur hśn merkt aš žar inni sé dżr af įkvešinni tegund.

Ef viš hugsum um setningar eins og "Sigga gat ekki fariš ķ bśšina žvķ hśn var lasin" og "Sigga gat ekki fariš ķ bśšina žvķ hśn var lokuš" žį įttum viš okkur strax į aš fornafniš "hśn" vķsar į Siggu ķ fyrri setn­ingunni en į bśšina ķ žeirri seinni. Viš gerum okkur grein fyrir žessu vegna žess aš viš vitum aš konum er hęttara viš lasleika en bśšum.

Til aš skilja žessar (og ašrar) setningar į venjulegum tungumįlum dugar ekki aš fletta upp ķ mįlfręšireglum og oršabókum. Til aš skilja manna­mįl žarf aš styšjast viš heil ókjör af vitneskju til višbótar viš reglur um mįlskipan og merkingarfręši. Žegar forritunarmįl eiga ķ hlut duga mįlfręšireglur hins vegar fullkomlega til aš skera śr um hvort runa af tįknum er rétt mynduš setning (eša forrit eša forritshluti) og žegar žaš hefur veriš gert er hęgt aš komast aš merkingu hennar įn žess aš styšjast viš neitt annaš en oršabękur og formlegar reglur sem yfirleitt eru ekki fyrirferšarmeiri en svo aš hęgt er aš koma žeim fyrir ķ einni lķtilli bók.

Backus Naur rithįttur

Żmsar leišir eru til aš lżsa mįlskipan forritunarmįla. Ein sś algengasta er Backus-Naur rithįttur. Tįknin sem eru notuš til aš gera grein fyrir mįl­skipan meš žessum hętti eru , | og oddbogar. (Stundum er ::= eša => notaš ķ stašinn fyrir

Viš skulum taka sem dęmi skilgreiningu į gildisgjöf ķ mįli eins og Java eša C. Hśn gęti veriš svona:

gildisgjöf nafn segš

Žetta žżšir aš gildisgjöf sé skilgreind žannig aš fyrst komi nafn, svo komi merkiš = og svo komi segš. Merkiš = er ekki innan oddboga žvķ žaš er lokatįkn, ž.e.a.s. tįkn sem ekki žarf aš skilgreina nįnar. Oršiš nafn er hins vegar innan oddboga žvķ žaš žarf aš skilgreina nįnar hvaš nafn er.

Ef viš gerum rįš fyrir aš nafn sé myndaš śr einum eša fleiri litlum bók­stöfum śr enska stafrófinu og engu öšru žį getum viš skilgreint nafn svona:

nafn bókstafur bókstafur nafn

Tįkniš | žżšir eša svo žessi skilgreining segir aš nafn sé annaš hvort einn bókstafur eša einn bókstafur og nafn. Til aš žessi skilgreining sé notahęf žarf aš skilgreina bókstaf. Ef viš höldum okkur viš litlu stafina ķ enska stafrófinu getum viš gert žaš svona:

bókstafur a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z

Samkvęmt žessu er x nafn žvķ žaš er einn bókstafur. ex er lķka nafn žvķ žaš er bókstafur (nefnilega e) meš nafni fyrir aftan (nefnilega x). Meš sömu rökum er kex nafn žvķ žaš er bókstafur (nefnilega k) meš nafni (nefnilega ex) fyrir aftan.

Hér er bókstafur skilgreindur meš tómum lokatįknum. Skilgrein­ingar meš Backus-Naur rithętti geta innihaldiš atriši sem žarf aš skil­greina nįnar. Skilgreiningar į žessum atrišum geta svo innihaldiš enn önnur atriši sem žarfnast skilgreiningar en žetta getur ekki haldiš enda­laust įfram. Viš endum alltaf į lokatįknum sem eru hluti af orša­forša eša stafrófi mįlsins sem fjallaš er um.

Skilgreiningar į mįlskipan heils forritunarmįls eins og Java eša C fylla nokkrar blašsķšur. Hér mun žvķ lįtiš duga aš skilgreina ofurlķtinn part af mįli sem svipar til Java og C. Žessi partur inniheldur:

nöfn śr litlum stöfum śr enska stafrófinu;

gildisgjöf (meš merkinu =);

jįkvęšar heilar tölur;

segšir sem eru myndašar śr heilum tölum, nöfnum, reikniašgeršunum +, - og * og svigum;

Meš žessu getum viš myndaš skipanir eins og

breidd = 7

lengd = 5*(y-3)

magn = 3 + 5 * (y - 1)

Viš vorum bśin aš skilgreina gildisgjöf, nafn og bókstaf svona.

gildisgjöf nafn segš

nafn bókstafur bókstafur nafn

bókstafur a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z

Žį į eftir aš skilgreina segš og tölu. Žaš er gert hér fyrir nešan.

segš lišur lišur segš lišur segš

lišur žįttur žįttur lišur

žįttur nafn tala segš

tala tölustafur tölustafur tala

tölustafur

Athugum nś hvernig hęgt er aš leiša śt setninguna

magn = 3 + 5 * (y - 1)

Setningin er gildisgjöf į forminu

nafn segš

magn er nafn samkvęmt reglum nśmer 2 og 3. Žetta er hęgt aš leiša śt skref fyrir skref svona.

nafn

bókstafur nafn Skv. 2. reglu mį setja bókstafur nafn ķ staš nafn

m nafn Skv. 3. reglu mį setja m ķ staš bókstafur

m bókstafur nafn Skv. 2. reglu mį setja bókstafur nafn ķ staš nafn

ma nafn Skv. 3. reglu mį setja a ķ staš bókstafur

ma bókstafur nafn Skv. 2. reglu mį setja bókstafur nafn ķ staš nafn

mag nafn Skv. 3. reglu mį setja g ķ staš bókstafur

mag bókstafur Skv. 2. reglu mį setja bókstafur ķ staš nafn

magn  Skv. 3. reglu mį setja n ķ staš bókstafur

3 + 5 * (y - 1) er segš samkvęmt reglunum. Žetta er hęgt aš leiša śt skref fyrir skref svona:

segš

lišur segš 4. regla: segš lišur segš

žįttur segš 5. regla: lišur žįttur

tala segš 6. regla: žįttur tala

tölustafur segš 7. regla: tala tölustafur

segš 8. regla: tölustafur

lišur 4. regla: segš lišur

žįttur lišur 5. regla: lišur žįttur lišur

tala lišur 6. regla: žįttur tala

tölustafur lišur 7. regla: tala tölustafur

lišur 8. regla: tölustafur

žįttur 5. regla: lišur žįttur

segš 6. regla: žįttur segš

lišur segš 4. regla: segš lišur segš

žįttur segš 5. regla: lišur žįttur

nafn segš 6. regla: žįttur nafn

bókstafur segš 2. regla: nafn bókstafur

( y - segš 3. regla: bókstafur y.

( y - lišur 4. regla: segš lišur

( y - žįttur 5. regla: lišur žįttur

( y - tala 6. regla: žįttur tala

( y - tölustafur 7. regla: tala tölustafur

( y - 1 ) 8. regla: tölustafur

Reglur 1 til 8 lżsa ašeins ofurlitlum hluta af forritunarmįli. En žaš er hęgt aš bęta viš reglum eins og t.d. žessum:

skilyršissetning if ( röksegš skipanablokk

röksegš segš samanburšarvirki segš

samanburšarvirki < | >

skipanablokk

skipanaruna skipun skipun skipanaruna

skipun gildisgjöf skilyršissetning

Samkvęmt reglum 1 til 14 er hęgt aš mynda setningar eins og:

if (x > 3)

eša

if (x + 5 > y)

Verkefni 8.1.a

Leiddu eftirtaldar setningar af myndunarreglum 1 til 14.

x = 5 - 3 ax = x - 2 * y if (x > 3)

Verkefni 8.1.b

Myndunarreglur 8 til 9 duga til aš mynda jįkvęšar heilar tölur. Settu fram myndunar­reglur sem duga til aš mynda bęši jįkvęšar og nei­kvęš­ar kommutölur.

Verkefni 8.1.c

Myndunarreglur 2 og 3 duga til aš mynda nöfn śr litlum bókstöfum śr enska stafrófinu. Settu fram myndunarreglur fyrir nöfn sem eru mynduš śr bókstöfum og tölustöfum žannig aš fyrsti stafurinn sé žó alltaf bók­stafur.

Višbętur viš Backus-Naur rithįtt og flęširit

Žau dęmi sem hér hafa veriš skošuš sżna aš Backus-Naur rithįttur er nokkuš langoršur. Žaš žarf margar reglur til aš gera grein fyrir einföld­ustu atrišum ķ mįlskipan forritunarmįla og langar śtleišslur til aš leiša setn­ingar af reglunum. Til aš bęta śr žessu hafa veriš settar fram viš­bęt­ur viš Backus-Naur rithįttinn (į ensku extended Backus-Naur form skst. EBNF). Žessar višbętur eru einkum fólgnar ķ žvķ aš nota horn­klofa til aš tįkna aš atriši komi fyrir 0 eša 1 sinni og slaufusviga til aš tįkna aš žaš komi 0 sinnum eša oftar. Meš žessum višbótum er hęgt aš skrifa myndunarreglur fyrir nafn sem byrjar į bókstaf og inni­heldur bókstafi og tölustafi svona:

nafn bókstafur

Žetta žżšir aš fyrst komi bókstafur svo komi 0 sinnum eša oftar bók­stafur eša tölustafur. Meš hornklofum og slaufusvigum er lķka fremur aušvelt aš skrifa myndunarreglur fyrir tölur sem duga til aš mynda alls konar tölur, jįkvęšar og neikvęšar, heiltölur og brot.

tala formerki tölustafur tölustafur

formerki

tölustafur

Myndunarreglan fyrir tölu segir aš fyrst komi formerki ž.e. ekkert eša eitt for­­merki. Žaš mį semsagt sleppa formerkinu og žaš mį setja eitt for­merki. Nęst kemur tölustafur og žar fyrir aftan ž.e. 0 eša fleiri tölustafir. Aftan viš žetta kemur tölustafur sem merk­ir aš setja megi einu sinni (eša aldrei) kommu meš tölu­stöfum fyrir aftan.

Til eru fleiri ašferšir til aš gera grein fyrir mįlskipan forritunarmįla. Ein žeirra algengustu er aš teikna flęširit eins og hér fyrir nešan. Loka­tįkn eru höfš innan ķ hring og tįkn sem žarf aš skilgreina nįnar eru skrifuš innan ķ ferhyrning. Til aš mynda setningu žarf aš fylgja stefnu örvanna. Fyrsta myndin sżnir t.d. aš hęgt er aš mynda segš śr einum liš eša meš žvķ aš skrifa einn liš og svo annaš hvort plśs eša mķnus og fara svo aftur gegnum alla myndina.

Flęširit sem samsvarar myndunarreglunni

segš lišur lišur segš lišur segš

Flęširit sem samsvarar myndunarreglunni

lišur žįttur žįttur lišur

Flęširit sem samsvarar myndunarreglunni

žįttur nafn tala segš

Til eru žokkalega fljótvirk algrķm sem taka viš myndunarreglum į Backus-Naur formi og texta og skera śr um hvort textinn er ķ samręmi viš myndunarreglurnar. Meš Backus-Naur rithętti eša flęširitum er hęgt aš setja fram reglur sem skera śr um hvort setning er ķ samręmi viš mįlfręšireglur en žessar reglur segja ekkert um merkingu žeirra.

Verkefni 8.1.d

Teiknašu flęširit sem samsvara myndunarreglunum

skilyršissetning if ( röksegš skipanablokk

skipanablokk

skipanaruna skipun skipun skipanaruna

skipun gildisgjöf skilyršissetning

Forritunarmįl

Vélamįl og ęšri forritunarmįl

Hver tegund gjörva getur hlżtt skipunum į einu vélamįli. Vélamįl eru yfirleitt mjög einföld aš žvķ leyti aš žau hafa einfalda mįlskipun, lķt­inn oršaforša og merking hverrar setningar er óbrotin og aušskilgrein­anleg. Žessi einfaldleiki veldur žvķ aš hęgt er aš smķša ódżrar vélar (gjörva) sem "skilja" vélamįlin en hann veldur žvķ lķka aš vélamįl eru afar erfiš fyrir fólk žvķ:

Žaš er erfitt aš lęra žau žar sem skipanir samsvara ekki hugtökum sem fólki er tamt aš nota;

Hver skipun segir mjög lķtiš svo žaš žarf langar romsur til aš lżsa einföldustu verkum;

Žaš er erfitt aš lesa forrit į vélamįli til aš breyta žeim eša finna og leišrétta villur.

Flest forrit eru samin į svoköllušum ęšri forritunarmįlum. Žetta eru mįl sem hęgt er aš žżša į vélamįl hvaša gjörva sem er žvķ, eins og nefnt hefur veriš, eru til algrķm til aš įkvarša hvort runur af tįknum eru rétt mynduš forrit į tilteknu forritunarmįli og hvaša merkingu žau žį hafa.

Helstu kostir sem ęšri forritunarmįl hafa umfram vélamįl eru:

Žaš er aušvelt aš lęra žau žar sem skipanir samsvara nokkurn veginn hugtökum sem fólki er tamt aš nota;

Forrit eru žokkalega lęsileg svo aušvelt er aš breyta žeim og finna vill­ur og leišrétta žęr;

Aušvelt er aš fęra forrit milli ólķkra véla žvķ fyrir flest tölvukerfi eru til žżšendur sem žżša af mörgum algengum forritunarmįlum.

Smalamįl eru eins konar millistig milli vélamįla og ęšri forritunar­mįla. Hver skipun į smalamįli samsvarar einni skipun į vélamįli. Mun­­­ur­­inn er einkum ķ žvķ fólginn aš žar sem skipanir į vélamįlum eru ritašar sem tölur ķ tvķundakerfi eru skipanir į smalamįlum ritašar meš skamm­stöfunum. Einnig leyfa smalamįl yfirleitt aš breytum séu gefin lżsandi nöfn.

Hér er forritsbśtur į Pascal sem męlir fyrir um aš skrifa skuli enska stafrófiš frį A til Z.

FOR s := 'A' TO 'Z' DO

BEGIN

Write(s);

END;

Hér kemur žżšing į smalamįl fyrir Intel 8086 örgjörva:

MOV DL, 'A'

MOV CX, 26

slaufa: CALL skrifa

LOOP slaufa

INT 32

skrifa: MOV AH, 2

INT 33

INC DL

RET

Og er žżšing į vélamįl Intel 8086 örgjörvans:

01000001

10111001 00011010 00000000

11101000 00000100 00000000

11100010 11111011

11001101 00100000

10110100 00000010

11001101 00100001

11111110 11000010

11000011

Žegar rętt er um vélamįl er yfirleitt įtt viš mįl sem žarf aš žżša forrit af ęšri mįlum į til aš tölva geti keyrt žau. Stundum er nokkur munur į žessum mįlum og žeim sem vélbśnašur tölva getur framkvęmt milli­liša­laust. Žęr skipanir į vélamįli sem ekki er hęgt aš keyra beint į vélbśnašinum eru oftast tślkašar af hugbśnaši sem er falinn ķ lesminni.

Forritsbśturinn sem skrifašur er į Pascal, smalamįli og vélamįli hér aš ofan skrifar enska stafrófiš (frį A til Z) į skjį tölvunnar. Skipan­irnar sem birta stafina į skjįnum sjįst hvorki ķ smalamįls- né vélamįls­kótanum. Ķ staš žeirra eru į smalamįlinu

MOV AH, 2

INT 33

og į vélamįlinu

10110100 00000010

11001101 00100001

Žessar skipanir hlaša tölunni 2 inn ķ eitt af gistum gjörvans og kalla sķšan į rof nśmer 33 meš žeim afleišingum aš framkvęmd er skipana­romsa ķ les­minn­inu sem birtir staf į skjįnum. Žessi skipanaromsa er ansi löng og ef henni vęri skotiš inn ķ vélamįlskótann žį kęmist hann ekki į eina blašsķšu.

Til aš keyra forrit į žvķ vélamįl sem forrit eru žżdd į af ęšri mįl­um getur tölva žurft aš nota heilmikiš af hugbśnaši, en sį hugbśn­ašur er yfirleitt innbyggšur ķ lesminni hennar og forritarar žurfa ekki aš hafa neinar įhyggjur af žvķ hvar mörkin liggja milli vélbśnašar og hugbśn­ašar ķ lesminni.

Stundum er forritunarmįlum skipaš ķ stigveldi eftir žvķ hvaš žau eru "nįlęgt" vélbśnašinum. Vélamįl er nešarlega ķ žessu stigveldi. Ofan viš vélamįlin koma svo smalamįl og žar fyrir ofan ęšri mįl. Ęšri forritunarmįl eru ekki öll į sama staš ķ žessu stigveldi. Sum mįl eins og t.d. C eru nešarlega vegna žess aš žau gefa forriturum kost į aš vķsa į tiltekna staši ķ minni eša tiltekin gisti ķ gjörva. Önnur mįl eins og Pascal eša Java eru ofar vegna žess aš žau gefa forriturum ekki kost į žessu. Forrit sem standa nešarlega ķ stigveldinu eru stundum kölluš lįgtęknimįl (į ensku low-level langu­ages).

Almennt mį segja aš lįgtęknimįl hafi žį kosti aš veita forritara fullt vald yfir vélinni meš žvķ aš stjórna innihaldi einstakra vistfanga ķ minni og gista ķ gjörva. Žeir sem skrifa stżrikerfi og rekla fyrir jašar­tęki žurfa oft į žessum möguleikum lįgtęknimįlanna aš halda. Stund­um er lķka hęgt aš nżta žį til aš skrifa forrit sem taka minna plįss og keyra hrašar en forrit sem skrifuš eru į ęšri mįlum. En žaš er lķka hęgt aš misnota žį til aš gera verri vitleysur en hęgt er meš góšu móti aš koma oršum aš į ęšri mįlum. Yfirleitt žarf töluverša žekk­ingu į vél­bśnaši til aš geta nżtt kosti lįgtęknimįla.

Žżšendur og tślkar

Forrit sem žżša af einu forritunarmįli į annaš eru af tvennu tagi: žżšendur og tślkar. Ķ flestum tilvikum žżša žessi forrit af ęšri forrit­unar­mįlum į vélamįl. Žaš eru žó til žżšendur og tślkar sem žżša af einu vélamįli į annaš eša milli annarra mįla en vélamįla.

Žżšandi (į ensku compiler) les heilt forrit, žżšir žaš allt frį upphafi til enda og skrifar žżšinguna ķ skrį. Ef žżšingin er į vélamįl er skrįin sem žżšandinn skrifar śt yfirleitt keyrsluhęft forrit. Eftir aš žżšandi hefur lokiš verki sķnu er forritiš til į tveim mįlum: mįlinu sem žaš var skrifaš į og mįlinu sem žaš var žżtt į, sem er oftast vélamįl.

Verkinu sem žżšandi vinnur er hęgt aš lżsa į žessa leiš:

byrja į upphafi forrits;

endurtaka mešan (ekki er komiš aš enda forrits)

skrifa allt śttakiš ķ skrį;

Tślkur (į ensku interpreter) les forrit skipun fyrir skipun og ķ hvert sinn sem heil skipun hefur veriš lesin er hśn žżdd og tölvan lįtin fram­kvęma hana. Žegar tślkur hefur lokiš störfum er bśiš aš fram­kvęma forrit einu sinni en žżšingin er hvergi til. Verkinu sem tślkur vinnur er hęgt aš lżsa į žessa leiš:

byrja į upphafi forrits;

endurtaka mešan (ekki er komiš aš enda forrits)

Hvort sem žżšandi eša tślkur į ķ hlut mį skipta žżšingunni ķ žrjį verk­žętti sem eru:

Lesgreining, ž.e. aš skipta runu af stöfum nišur ķ einstök orš og merk­ingarbęr tįkn.

Setningafręšileg greining sem er ķ žvķ fólgin aš mįta žį runu af oršum og tįknum sem fęst śt śr lesgreiningunni viš myndunarreglur sem lżsa mįlskipun forritunarmįlsins.

Kótasmķš sem er hin eiginlega žżšing. Bśin er til runa af tįknum į öšru mįli (oftast vélamįli) sem hefur sömu merkingu og forritiš.

Hugsum okkur aš žżšandi taki viš eftirfarandi skipun į forritunar­mįlinu C.

if (xhnit == 7)

Lesgreining skiptir žessu ķ orš og tįkn svona:

if

xhnit

Setningafręšileg greining leišir svo ķ ljós aš žetta er skilyršissetning į forminu

if ( röksegš

Kótasmķšin bżr svo til vélamįlskóta sem samsvarar žessari skipun.

Eftir aš kótasmķši er lokiš yfirfara flestir žżšendur vélamįls­roms­una og stytta hana og lagfęra eins og kostur er til aš forritiš verši sem hrašvirkast og fyrirferšarminnst.

Nokkur algeng forritunarmįl

Ęšri forritunarmįlum er stundum skipt ķ nokkrar mįlaęttir. Flest algeng­ustu mįlin, eins og BASIC, Pascal, Delphi, C, C++ og Java til­heyra flokki gildingarmįla (į ensku imperative languages). Sam­kenni žessara mįla er aš gildisgjöf (skipanir til aš gefa breytum gildi) gegnir lykilhlutverki. Feykilega mörg forritunarmįl tilheyra žess­um flokki. Hér verša ašeins talin nokkur žau žekktustu:

Fortran er elst allra ęšri forritunarmįla. Fyrsti Fortran žżšandinn var bśinn til įriš 1955. Nafniš er stytting į Formula translator. Fortran er enn töluvert notaš af verkfręšingum og öšrum sem forrita tölvur til aš vinna śtreikninga einkum į sviši tękni- og raun­vķsinda.

COBOL er eitt af elstu mįlunum. Žaš var bśiš til ķ kringum 1960. Nafniš er stytting į Common Buisness Oriented Language. COBOL var einkum notaš til aš skrifa forrit fyrir višskiptalķfiš.

PL/1 er litlu yngra en COBOL og žvķ var einnig ętlaš aš žjóna žörfum višskiptalķfsins.

BASIC var upphaflega bśiš til um 1965 en žęr śtgįfur sem nś eru ķ notkun eru ansi frįbrugšnar fyrstu gerš mįlsins. Nafniš stendur fyrir Beginner's Advanced Symbolic Instruction Code.

Basic er fremur einfalt mįl og aušlęrt. Upphaflega tóku tślkar fyrir žaš lķtiš rśm ķ minni og geršu litlar kröfur til vélbśnašar. Žegar einmenningstölvur komu fyrst fram į 8. įratugnum fylgdi žeim yfirleitt BASIC tślkur og sķšan mį segja aš mįliš hafi žróast meš einmennings­tölv­­unum og žaš er enn žann dag ķ dag mikiš notaš til aš semja smį­forrit og fjölva fyrir einmenningstölvur.

Sś śtgįfa af BASIC sem nś nżtur mestra vinsęlda er Visual BASIC frį Miccrosoft. Žvķ fylgir hugbśnašur til sjįlfvirkrar kótunar į notenda­skilum fyrir Windows forrit. Meš žessum bśnaši er hęgt aš raša upp valmyndum, hnöppum, tękjastikum og fleiri sżnilegum hlutum og forritskótinn sem segir fyrir um gerš žeirra og stašsetningu veršur til sjįlf­krafa. Forritin ķ Microsoft Office pakkanum (Word, Excel, Power­Point, Access) hafa innbyggšan tślk fyrir afbrigši af Visual BASIC sem heitir Visual BASIC for Applications. Į žvķ mįli er hęgt aš skrifa fjölva til aš keyra ķ žessum forritum.

Öfugt viš flest gildingarmįl (sem eru yfirleitt žżdd) er BASIC oftast tślkaš. Fyrir sumar śtgįfur eru žó bęši til žżšendur og tślkar.

Pascal var bśiš til um 1970. Žaš var upphaflega hugsaš sem kennslu­mįl en nįši fljótt miklum vinsęldum og hefur um 30 įra skeiš veriš notaš viš hugbśnašargerš į mörgum svišum.

Pascal er aš verulegu leyti snišiš eftir eldra mįli sem heitir Algol og er yfirleitt tališ fyrsta mótaša forritunarmįliš. Mįlfręši Pascal er žó mun einfaldari en Algol og raunar eru fį forritunarmįl meš jafn einfalda mįlskipan og merkingarfręši eins og Pascal. Fyrir vikiš er žaš fremur aušlęrt og aušvelt er aš bśa til trausta žżšendur fyrir žaš.

Żmis nżrri forritunarmįl hafa veriš bśin til undir įhrifum frį Pascal. Hér mį t.d. nefna Ada (sem er mikiš notaš af bandarķska hernum) Modula 2, Concurrent Pascal og Delphi. Ķ sumum tilvikum er įlitamįl hvort žetta eru nż mįl eša afbrigši af Pascal žau eru a.m.k. ekkert ólķkari innbyršis en žau afbrigši sem til eru af BASIC.

Mešal žeirra sem semja forrit fyrir Microsoft Windows stżrikerfiš er Delphi vinsęlast žessara Pascal afbrigša. Delphi bżšur bęši upp į alla kosti hlutbundinnar forritunar og sjįlfvirka kótun į notendaskilum.

C var bśiš til įriš 1972. Žaš er mótaš mįl eins og Pascal og byggir lķka aš nokkru leyti į Algol. Frį upphafi hefur C haft nįin tengsl viš UNIX stżrikerfiš žótt žżšendur séu til fyrir flest stżrikerfi.

C hefur sérstöšu mešal ęšri forritunarmįla vegna žess hvaš žaš veitir forriturum mikiš vald yfir innvišum vélarinnar. Žżšendur fyrir C skila yfirleitt mjög samžjöppušum og hrašvirkum kóta. C hefur žvķ flesta kosti lįgtęknimįla (smalamįla og vélamįla) en er laust viš verstu galla žeirra. Fyrir vikiš nżtur C vinsęlda mešal žeirra sem semja kerfis­­hugbśnaš (stżrikerfi, rekla o. ž. u. l.).

C++ var bśiš til snemma į 9. įratugnum. Žaš inniheldur višbętur viš C sem gera mögulegt aš skrifa hlutbundin forrit. Žessar višbętur gagn­ast einkum viš gerš stórra hugbśnašarverkefna en aušvelda lķka mjög forritun fyrir gluggakerfi.

Sķšan C++ kom fram hefur žaš įtt vaxandi vinsęldum aš fagna og er nś mest notaš allra forritunarmįla viš lausn stórra hugbśnašar­verkefna. Žaš sameinar kosti lįgtęknimįla og hlutbundinnar forrit­unar og gefur forriturum žvķ bęši möguleika į aš nį fullkomnu valdi yfir vélbśn­ašinum og aš skipuleggja flókin forrit.

Java er ungt mįl (bśiš til į įrunum eftir 1990). Java markar nokkur tķmamót žvķ žaš var frį upphafi hugsaš fyrir hlutbundna forritun, samspil tölva į neti og keyrslu į vefsķšum.

Java svipar um margt til C++ en er žó mun einfaldara og žaš bżšur ekki upp į möguleika į lįgtękniforritun. Mešal mikilvęgustu ein­kenna žess er aš žaš er ķ senn žżtt og tślkaš. Java žżšandi žżšir ekki į vélamįl neins tiltekins gjörva heldur į millimįl sem kallast Bytecode. Bytecode er afar einfalt mįl og fyrir öll vélamįl er aušvelt aš bśa til hrašvirkan tślk sem tślkar af Bytecode. Žegar bśiš er aš žżša forrit af Java į Bytecode er hęgt aš keyra žaš į hvaša tölvu sem er aš žvķ tilskildu aš hśn hafi Bytecode tślk. Flest önnur žżdd mįl eru žżdd į vélamįl einhver tiltekins örgjörva og gerš til aš nżta sér žjónustu tiltek­ins stżrikerfis. Hafi forrit t.d. veriš skrifaš į C og žżtt į PC tölvu sem keyrir Microsoft Windows žį er ašeins hęgt aš keyra žżšinguna į PC tölvum sem nota Windows stżrikerfiš.

Bytecode tślkur er innbyggšur ķ flestar vefsjįr (eins og Netscape Navigator og Internet Explorer) svo žęr geta keyrt Java forrit sem vķsaš er ķ af vefsķšum. Slķk forrit kallast Applet. Einnig er hęgt aš lįta vefžjóna keyra Javaforrit og kallast žau žį Servlet. Java er žó ekki eingöngu til aš skrifa forrit fyrir vefinn. Žaš er fullkomiš alhliša forritunarmįl og hentar m.a. vel til aš skrifa forrit fyrir išntölvur og sjįlfvirknibśnaš af żmsu tagi.

Perl er mįl sem svipar um margt til C en er sérstakt aš žvķ leyti aš žaš hentar vel til aš vinna meš strengi (ž.e. runur af stöfum og tįknum). Į sķš­ustu įrum hefur Perl notiš vaxandi vinsęlda mešal žeirra sem skrifa CGI-bin forrit, ž.e. forrit sem keyrš eru af vefžjónum, yfirleitt til aš bregšast viš einhverjum skilabošum frį vefsjį. Dęmi um CGI-bin forrit eru til dęmis leitarvélar į vefnum.

Javascript. Meš žróun og śtbreišslu veraldarvefsins hefur skapast žörf fyrir forrit af żmsu tagi til aš keyra ķ vefsjįm og į vefžjónum. Žegar hefur veriš minnst į Java og Perl. Žetta eru fullkomin alhliša forritunarmįl sem eru ekkert endilega til aš skrifa forrit sem tengjast vefsjį eša vefžjóni. Javascript er hins vegar einfalt mįl (sem į fįtt sameiginlegt meš Java) sem er eingöngu til aš skrifa forrit til aš setja į vefsķšur. Forrit į žessu mįli eru skrifuš inn į vefsķšurnar og flestar vefsjįr inni­halda tślk til aš tślka Javascript forrit.

Frį spaghettķkóta til mótašra mįla

Undir lok kafla 7.1. var fjallaš um algrķm til aš skrifa tölu ķ tvķunda­kerfi. Skošum hvernig žetta algrķm lķtur śt į gamaldags BASIC.

1 INPUT X%

2 S$ = ""

3 T% = X% MOD 2

4 IF T% = 1 THEN S$ = "1" + S$ ELSE S$ = "0" + S$

5 x% = INT(X% / 2)

6 IF X% > 0 THEN GOTO 3

7 PRINT S$

Nöfn breyta rįša tegundum žeirra (nafn sem endar į $ tįknar streng og % tölu). Skilyrši eru tįknuš meš IF - THEN eša IF - THEN - ELSE en žaš er engin skipun fyrir endurtekningu önnur en GOTO til aš hoppa fram og aftur um forritiš. Skipanirnar eru framkvęmdar ķ röš og žaš er eingin leiš aš pakka žeim saman ķ blokkir eša undirforrit.

Langt forrit į gamaldags BASIC getur innihaldiš margar GOTO skipanir sem lįta keyrsluna hoppa hingaš og žangaš žannig aš reyni mašur aš žręša sig gegnum forritiš verši śr flękja sem minnir helst į fullan disk af spaghettķ. Slķk forrit eru illęsileg og žaš er erfitt aš leiš­rétta villur ķ žeim og fyrir vikiš fékk BASIC hįlfgert óorš į sig. Nżlegar śtgįfur BASIC hafa žó helstu kosti mótašra mįla svo žaš er óžarfi aš lįta glósur um spaghettķforritun fęla sig frį aš nota BASIC.

Skošum nś hvernig žetta sama algrķm lķtur śt ef žaš er skrifaš į nżlegri gerš af BASIC.

INPUT N%

PRINT tuga2tvi$(N%)

FUNCTION tuga2tvi$(x%)

S$ = ""

WHILE x% > 0

T% = x% MOD 2

IF T% = 1 THEN S$ = "1" + S$ ELSE S$ = "0" + S$

x% = INT(x% / 2)

WEND

tuga2tvi$ = S$

END FUNCTION

Ašalforritiš er ašeins tvęr lķnur. Sś fyrri (INPUT x%) les gildi inni ķ talnabreytuna N% og sś seinni skrifar śtkomuna śr žvķ aš senda fallinu tuga2tvi$ gildi breytunnar N%. Falliš er sjįlfstętt undirforrit meš sķnar eigin breytur. Endurtekning er forrituš meš

WHILE skilyrši

skipanir

WEND

Skipanir milli WHILE og END mynda eins konar blokk sem er endur­tekin. Į svipašan hįtt er hęgt aš pakka mörgum skipunum sam­an inn ķ skilyršissetningu svona:

IF skilyrši THEN

skipanir

END IF

Žessi śtgįfa af BASIC hefur tvö af megineinkennum mótašra mįla sem eru aš:

Hęgt er aš skilgreina sjįlfstęš undirforrit (eša föll) sem hafa staš­vęr­ar breytur.

Hęgt er aš pakka mörgum skipunum saman ķ blokkir innan ķ endur­tekn­ingu eša skilyršissetningu.

BASIC er žó ekki bįlkaš eins og Pascal eša C žar sem allar skipanir tilheyra skipana­blokk og žessar blokkir geta veriš hver innan ķ annarri. Ķ Pascal afmarkast žęr af oršunum BEGIN og END, ķ C afmarkast žęr af slaufusvigum. Hér į eftir er algrķmiš sem ritar tölu ķ tvķundakerfi skrifaš į Pascal.

PROGRAM ur_tuga_i_tviundakerfi;

VAR x : Integer;

FUNCTION tuga2tvi(x : Integer) : String;

VAR s, t : String;

BEGIN

s := '';

WHILE (x > 0) DO

BEGIN

Str((x MOD 2), t);

x := x DIV 2;

s := t + s;

END;

tuga2tvi := s;

END;

BEGIN

Readln(x);

Writeln(tuga2tvi(x));

END.

Falliš tuga2tvi tekur viš einni heiltölu og skilar streng. Skipanirnar ķ žvķ mynda eina blokk og afmarkast af oršunum BEGIN og END. Ašal­forrit­iš er nešst. Žaš inniheldur tvęr skipanir sem einnig mynda blokk.

Pascal er tagaš eins og flest mótuš mįl. Žetta žżšir aš hver einasta breyta er skilgreind įšur en hśn er notuš og tekiš fram af hvaša tegund hśn er. T.d. eru stašvęru breyturnar s og t ķ fallinu tuga2tvi af tegund­inni String.

Žrišja meginein­kenni mótašra mįla er aš hęgt er aš skilgreina nżjar teg­undir af gögn­um og byggja flóknar gagnagrindur.

Ķ BASIC er hęgt aš nota fylki auk strengja, bókstafa og talna en žaš bżšur ekki upp į sömu möguleika į aš skilgreina nżjar teg­undir eins og mótušu mįlin Pascal og C.

Lķtum t.d. į hvernig hęgt er aš skilgreina spilastokk ķ Pascal.

TYPE

litur = (hjarta, spadi, tigull, lauf);

gildi = 1..13;

spil = RECORD

l : litur;

g : gildi;

END;

spilastokkur = ARRAY[1..52] OF spil;

Oršiš TYPE tįknar aš į eftir komi skilgreiningar į tegundum. Fyrst er tegundin litur skilgreind žannig aš hśn geti tekiš gildin hjarta, spadi, tigull, eša lauf og tegundin gildi er skilgreind žannig aš hśn geti geymt tölu milli 1 og 13. Nęst er spil skilgreint sem fęrsla sem inniheldur eina breytu af tegundinni litur og eina af tegundinni gildi og aš sķšustu er spilastokkur skilgreindur sem fylki af 52 spilum.

Žegar bśiš er aš smķša tegundina spilastokkur er svo hęgt aš skil­greina breytu af žeirri tegund svona:

VAR X : spilastokkur;

Mótuš mįl og ofansękin hönnun

Mótuš forritunarmįl voru hönnuš meš žaš fyrir augum aš aušvelda forriturum aš skipta flóknum verkum nišur ķ einfaldari verkžętti og nota ofansęknar (į ensku top down) ašferšir viš lausn žeirra.

Viš skulum taka sem dęmi aš skrifa eigi forrit sem teiknar turn eins og er hér til hęgri. Forritunarmįliš sem viš notum er blendingur af ķslensku mótušu mįli og viš gerum rįš fyrir aš žaš hafi ekki ašrar teikniskipanir en en skipun til aš teikna strik. Lįtum

strik(x1, y1, x2, y2)

žżša aš teiknaš skuli strik frį punkti meš hnitin (x1, y1) til punkts meš hnitin (x2, y2). Žaš er erfitt aš teikna turninn meš žvķ aš nota eingöngu žessar skipanir svo viš ķmyndum okkur aš viš höfum skipun til aš teikna ferhyrning žannig aš

ferhyrningur(x1, y1, h, b)

teikni ferhyrning meš horn nešst til vinstri ķ punktinum (x1, y1), hęšina h og breiddina b. Meš žessa (ķmyndušu) skipun aš vopni getum viš bśiš til undirforrit sem teiknar turn śr 5 ferhyrningum sem hver um sig er af stęršinni 40 sinnum 25. Horniš nešst til vinstri er ķ punktinum (0, 0).

undirforrit turn

}

Til aš žetta virki žarf aš bśa til skipunina ferhyrningur žvķ hśn er ekki innbyggš ķ mįliš. Žaš er hęgt aš gera svona:

ferhyrningur(heiltölur x1, y1, h, b)

Žessi ašferš byggist į žvķ aš byrja į aš lżsa verki ķ stórum drįttum meš žvķ aš ķmynda sér aš mašur hafi allar žęr skipanir sem hugurinn girn­ist (ķ žessu tilviki skipunina ferhyrningur). Sumar žeirra eru ķ raun og veru innbyggšar ķ mįliš en sumar ekki. Ķ nęstu umferš eru bśin til undirforrit fyrir allar žęr skipanir sem eru ekki innbyggšar ķ mįliš. Viš hvert žeirra er notuš sama ašferš žar til kemur aš undirforritum sem eru nógu einföld til aš hęgt sé aš skrifa žau į oršaforša mįlsins.

Meš mótušum forritunarmįlum fylgir išulega safn undirforrita til aš vinna algeng verk og verkžętti.

Hlutbundin forritun

Hlutbundin forritunarmįl hafa alla kosti mótašra mįla en aš auki bjóša žau upp į möguleika į aš skilgreina klasa (į ensku class), ž.e. tegundir sem innihalda bęši gögn og ašferšir.

Hér hefur veriš sżnt hvernig hęgt er aš skilgreina spilastokk ķ Pascal. Žessi spilastokkur getur ekkert gert annaš en geymt upplżsingar um lit og gildi 52 spila. Žaš er engin leiš aš kenna honum neinar aš­ferš­ir. Eigi til dęmis aš stokka hann eša sżna spilin į skjįnum žį žarf aš skrifa undirforrit til žess og žau eru ekki hluti af spilastokknum. Į hlutbundnum mįlum eins og C++, Delphi, og Java er hins vegar hęgt aš skilgreina spilastokk žannig aš hann innihaldi bęši spilin og aš­ferš­ir til aš gera eitthvaš viš žau eins og t.d. aš stokka žau og sżna žau į skjįnum.

Lķtum į hvernig hęgt er aš skrifa algrķmiš til aš umrita tölu į tvķundaform į Java. Ešlilegast er aš skilgreina klasa sem geymir eina heila tölu og kann ašferš til aš skrifa hana sem streng į tvķundaformi. Ef viš lįtum klasann heita Tala žį getur hann litiš svona śt:

public class Tala

public String tuga2tvi()

return s;

}

Breytan gildi er af tegundinni int (ž.e. heiltala) og hśn geymir töluna. Hśn er lokuš (private) sem merkir aš ašferširnar sem tilheyra klas­anum hafa einkarétt į aš breyta gildi hennar. Auk žessarar breytu hefur klasinn tvęr ašferšir. Önnur er smišur sem er notašur til aš bśa til hluti af tegundinni Tala hin er tuga2tvi() skilar streng sem er talan į tvķunda­formi.

Žegar žessi klasi hefur veriš skilgreindur er hęgt aš gefa skipun eins og

Tala t = new Tala(25)

til aš bśa til nżja tölu meš nafninu t og gefa henni gildiš 25. Svo er hęgt aš nota skipunina

String tvi = t.tuga2tvi()

til aš gefa strengnum tvi gildiš sem fęst meš žvķ aš lįta hlutinn t fram­kvęma į sér ašferšina tuga2tvi(). Meš skipuninni

t.tuga2tvi()

er hlutnum sem heitir t send skilaboš um aš framkvęma ašferšina tuga2tvi().

Meginmunurinn į mótušum mįlum og hlutbundnum er sį aš ķ mótušu mįlunum eru gögn ašskilin frį ašferšum. Heilt forrit į mįli eins og Pascal eša C samanstendur af gögnum og ašferšum. Ašferš­irnar eru undirforrit og föll sem gera eitthvaš viš gögnin. Gögnin eru geymd ķ breytum (sem geta veriš einfaldar eins og heiltölubreytur, all­flóknar eins og spilastokkur eša mjög flóknar eins og ęttartré, lķkan af gatna­kerfi ķ stórborg eša persóna ķ tölvuleik) og breyturnar gera ekki neitt.

Forrit sem skrifuš eru į hlutbundnum mįlum innihalda yfirleitt marga hluti sem geta sent hver öšrum skilaboš. Ein mikilvęg tegund skilaboša eru svokallašir atburšir (į ensku event). Atburšur er eitthvaš sem gerist ķ tölvunni, t.d. žegar smellt er į hnapp į lyklaboršinu, mśsin fęrš eša smellt meš henni. Atburšir gegna mikilvęgu hlutverki viš forrit­un notendaskila. Meš hlutbundnum mįlum er aušvelt aš lįta hnapp, valmynd eša annan hlut sem er sżnilegur į skjįnum senda öšrum hlutum atburši t.d. žegar smellt er į žį meš mśsinni. Žetta er oršaš svo aš meš hlutbundnum mįlum sé aušvelt aš bśa til atburša­rekin forrit.

Hugsum okkur aš forrita eigi tölvuleik žar sem karlar og kerlingar hoppa og hlaupa um. Į hlutbundnu mįli vęri ešlilegast aš byrja į aš skilgreina klasa sem inniheldur eigin­leika og ašferšir sem eru sam­eig­in­leg öllum körlum og kerlingum ķ leiknum. Hann gęti t.d. heitiš Persona[2] og innihaldiš notfrjįlsu (į ensku public) ašferširnar hoppa og hlaupa og skjóta.

Trślega žyrfti aš nota ofansękna hönnun til aš bśa til notfrjįlsu ašferširnar hoppa og hlaupa. En undirforritin sem lżsa einstök­um pörtum žessara verka og gögnin sem žau nota yršu algerlega lokuš (į ensku private) innan ķ klasanum. Aš ašferš eša breyta sé notfrjįls žżšir aš hęgt aš nota hana utan klasans sem hśn er skilgreind ķ. Sé hśn lokuš er žetta hins vegar ekki hęgt.

Hugsum okkur aš klasinn Persona innihaldi notfrjįlsa ašferš sem heitir hlaupa. Gerum rįš fyrir aš breytan p geymi hlut af tegundinni Persona. Viš getum žį sent p skilaboš um aš nota ašferšina hlaupa svona:

p.hlaupa();

Ef ašferšin hlaupa notar lokaš undiforrit sem heitir t.d. beygjaHnje žį getum viš ekki skipaš:

p.beygjaHnje();

žvķ beygjaHnje er ekki notfrjįls ašferš. Meš žvķ aš hafa sumar ašferšir og sumar breytur notfrjįlsar og ašrar lokašar geta klasar skammtaš ašgang aš innvišum sķnum. Žaš er žvķ eins og hver hlutur segi viš hina hlutina: Ég leyfi ykkur ekki aš fikta ķ mķnu dóti žvķ žį getiš žiš klśšraš mįlunum. Žiš megiš nota ašferšir og breytur sem ég skilgreini sem notfrjįlsar og žar sem ég fę aš hafa allt annaš ķ friši get ég tryggt aš žęr virki rétt. Žessi eiginleiki hlutbundinnar forritunar, aš geta lokaš gögn og ašferšir inni ķ sķnum klösum kallast żmist hjśpun eša upplżs­inga­huld (į ensku encapsulation).

Viš ętlušum aš hafa sumar persónurnar ķ leiknum karla og sumar įttu aš vera kerlingar. Klasinn Persona inniheldur allt sem karlar og kerlingar eiga sameiginlegt. Klasarnir Karl og Kerling žurfa ekki aš innihalda žessi sameiginlegu atriši. Žeir geta erft žau frį Persona. Įsamt mögu­leikum į aš hjśpa ašferšir og gögn eru erfšir (į ensku inheritance) meš mikilvęgustu einkennum hlutbundinnar forritunar. Meš žvķ aš lįta einn klasa erfa eigin­leika annars er hęgt aš endurnżta forritskóta sem er bśiš aš full­vinna aš žaulprófa įn žess aš hręra neitt ķ honum.

Enn eru ótaldir tveir mikilvęgir eiginleikar hlutbundinna forritunar­mįla sem eru er fjölbreytni og kvikleg binding.

Kvikleg binding (į ensku dynamic binding) žżšir aš žaš getur rįšist ķ keyrslu forrits af hvaša tegund breyta er, žaš žarf ekki aš negla žaš fast um leiš og forritiš er žżtt. Viš getum t.d. hugsaš okkur aš breytan k sé skilgreind sem Per­sona og ef notandi smellir meš mśsinni į einn hlut į skjįnum žį fįi hśn gildi af tegundinni Karl en ef smellt er į annan staš žį fįi hśn gildi af tegundinni Kerling.

Fjölbreytni (į ensku polymorphism) žżšir aš margar ašferšir geta heitiš sama nafni og žegar nafniš er notaš ręšst žaš af samhengi hver af ašferšunum er framkvęmd. Viš getum t.d. hugsaš okkur aš klasinn Karl hafi ašferš sem heitir dansa og lętur karlinn dansa ólmann strķšs­dans og klasinn Kerling hafi lķka ašferš sem heitir dansa og hśn lįti kerlinguna kjaga kringum mannętupott. Ef forrit inniheldur skipunina

k.dansa();

žį er śtkoman strķšsdans ef gildi k er af tegundinni Karl en öšru vķsi dans ef žaš er Kerling og žaš getur rįšist eftir aš keyrsla forrit hefst hvort tegund breytunnar er skilgreind af klasanum Karl eša af klasanum Kerling.

Viš getum nś dregiš saman ķ stutt mįl helstu einkenni hlutbund­inna forritunarmįla:

Ķ hlutbundnum mįlum er gögnum og ašferšum pakkaš saman ķ ein­ingar sem kallast klasar.

Breyta af tegund einhvers klasa er hlutur sem inniheldur eiginleika og ašferšir klasans. Hlutir geta sent hver öšrum skilaboš og stórt forrit er yfirleitt safn margra hluta sem skiptast į skilabošum og bregšast viš atburšum.

Hlutbundin mįl bjóša upp į hjśpun, erfšir, kviklega bindingu og fjölbreytni.

Rétt eins og söfn undirforrita fylgja mótušum mįlum fylgja hlutbundn­um mįlum söfn af klösum. Flestir forritarar nżta sér slķk söfn og bęta viš sķnum eigin klösum sem oft erfa eiginleika og ašferšir frį klösum sem fylgja meš mįlinu. Einnig ganga klasar milli forritara og sumir eiga stór söfn til višbótar žeim sem fylgja forritunarmįlinu. Žegar forrit­ari lżkur viš forrit hefur hann žvķ kannski ašeins skrifaš brot af öll­um žeim kóta sem forritiš er gert śr.

Hlutbundin mįl aušvelda forriturum mjög aš nżta vinnu hver ann­ars. Žótt hver klasi sé ef til vill ekki mjög frįbrugšinn forriti į mót­ušu mįli aušvelda žeir eiginleikar hlutbundinna mįl sem hér hefur veriš fjallaš um forriturum mjög mikiš aš glķma viš flókin verkefni og skipta meš sér verkum. Į móti kemur aš hlutbundin mįl eru yfirleitt fremur flókin svo žaš tekur lengri tķma aš lęra žau almennilega heldur en einfaldari mįl eins og Pascal eša BASIC.

Ašrar mįlaęttir

Flest algengustu forritunarmįlin tilheyra flokki gildingarmįla. Mįl af öšrum ęttum gegna žó mikilvęgu hlutverki į żmsum svišum tölvu­fręšinnar. Hér veršur fjallaš stuttlega um tvenns konar öšru vķsi forrit­unarmįl fallamįl og rökfręšimįl.

Elsta fallamįliš (į ensku functional language) heitir Lisp. Žaš kom fram žegar ķ įrdaga tölvanna fyrir 1960 og var byggt į lambda calculus sem er eins konar forritunarmįl sem rökfręšingurin Alonso Church bjó til ķ žeim tilgangi aš skilgreina stęršfręšilega ašferš į 4. įratug 20. aldar. Nokkur önnur fallamįl eins og Scheme og Logo eru nįskyld Lisp. Žessi mįl eru afar öflug aš žvķ leyti aš į žeim er hęgt aš orša flóknar ašferšir ķ stuttu mįli. Mįlskipan žeirra og merkingarfręši er lķka ein­fald­­ari en ķ flestum öšrum forritunarmįlum. Į móti kemur aš falla­mįlin gera yfirleitt miklar kröfur til vélabśnašar, forritin eru frek į minni og yfirleitt keyrš af tślkum sem eru heldur svifaseinir. Žótt žessi mįl henti vel til żmiss konar tilraunastarfsemi eru žau af žessum sök­um illa til žess fallin aš smķša notendaforrit sem žurfa aš keyra hratt į ódżr­um vélum.

Logo er mest notaš til aš kenna byrjendum forritun. Lisp og Scheme gegna mikilvęgu hlutverki viš rannsóknir ķ żmsum greinum tölvufręši m.a. gervigreindarfręšum (ž.e. fręšum sem snśast um aš fį tölvur til aš lķkja eftir mannlegu hugarstarfi og skynjun).

Mešal einkenna fallamįla eru:

Listavinnsla. Gögn eru geymd ķ listum sem eru kviklegar og afar sveigjan­legar gagnagrindur.

Forrit og gögn eru ekki ašgreind. Forrit eru listar af tįknum og gögnin sem žau vinna meš eru lķka listar af tįknum. Žetta žżšir aš forrit geta breytt sjįlf­um sér og aušvelt er aš bśa til forrit sem bęta ašferšum viš sjįlf sig.

Tiltekiš er hvaš forrit į aš gera meš žvķ aš skilgreina föll og lįta žau kalla hvert į annaš fremur en meš žvķ aš telja upp ķ röš žaš sem į aš gera.

Hér er ekki rśm til aš gera fallamįlum frekari skil. Forritiš sem hér fer į eftir er skrifaš į Scheme. Žaš tekur viš tölu og skrifar hana į formi tvķundakerfis.

(define (tuga2tvi x t)

(if (> x 0)

(tuga2tvi (quotient x 2) (append (list (remainder x 2)) t ))

t

)

(define (tvi x) (tuga2tvi x '()))

Eins og önnur mįl į Lisp-ęttinni er Scheme gagnvirkt žannig aš um leiš og bśiš er aš slį inn eitt fall er hęgt aš lįta tślkinn keyra žaš. Žaš er t.d. hęgt aš keyra falliš tvi (sem kallar į tuga2tvi) og fį aš sjį hvernig 25 lķtur śt ķ tvķundakerfi meš žvķ aš skrifa:

(tvi 25)

og Scheme tślkurinn svarar meš:

Af rökfręšimįlum er Prolog einna žekktast. Lķkt og Lisp og Scheme er žaš enn sem komiš er mest notaš viš rannsóknir og tilraunastarfsemi. Žaš hefur žó veriš notaš til aš smķša sérfręšikerfi (ž.e. forrit sem draga rökréttar įlyktanir af upplżsingum ķ gagnasafni, yfirleitt į einhverju sérfręšisviši).

Prolog er forritunarmįl af 4. kynslóš sem žżšir aš hver skipun samsvarar yfirleitt mjög löngum vélamįlskóta og forritari getur ķ mörg­um tilvikum lįtiš duga aš lżsa žvķ hvaš forrit į aš gera ķ staš žess aš skrifa algrķm sem tiltekur skref fyrir skref hvernig į aš gera žaš. Forrit į Prolog eru skrifuš sem runur af stašreyndum og skilgrein­ingum į eigin­leikum og venslum. Eigi til dęmis aš skrifa žęr stašreyndir aš Ślfur sé fašir Grķms og Grķmur sé fašir Žórólfs og Egils og Egill sé fašir Böšvars žį er hęgt aš gera žaš svona:

fašir(ślfur, grķmur).

fašir(grķmur, egill).

fašir(grķmur, žórólfur).

fašir(egill, böšvar).

Žaš er svo hęgt aš skilgreina venslin afi og bróšir meš

afi(A, B) :- fašir(A, X), fašir(X, B).

bróšir(A, B) :- fašir(X, A), fašir(X, B).

Fyrri skilgreiningin segir aš A sé afi B ef A er fašir einhvers, X, og sį sami X er fašir B. (Hér er öllu kvenfólki sleppt og skilgrein­ingin yrši dįlķtiš flóknari ef žaš vęri haft meš.)

Žessar fjórar stašreyndir og tvęr skilgreiningar mynda saman ofur­lķtiš forrit. Žegar Prolog tślkur hefur veriš matašur į žvķ er hęgt aš leggja fyrir hann spurningar eins og

afi(X, böšvar).

og tślkurinn svarar

X = grķmur

Prolog er aš žvķ leyti lķkt mįlum af Lisp-ęttinni aš listavinnsla gegnir mikilvęgu hlutverki. Hér fer į eftir forrit į Prolog sem skrifar tölu į formi tvķundakerfis.

dec2bin(0, [0]).

dec2bin(1, [1]).

dec2bin(X, [Haus|Hali]) :- Haus is X mod 2,

Y is X // 2,

dec2bin(Y, Hali).

conc([], L, L).

conc([X|L1], L2, [X|L3]) :- conc(L1, L2, L3).

snua([],[]).

snua([Haus|Hali], X) :- snua(Hali, Y),

conc(Y, [Haus], X).

tuga2tvi(X, S) :- dec2bin(X, S1), snua(S1, S).

Žegar Prolog tślkur hefur veriš matašur į žessum skilgreiningum er hęgt aš gefa fyrirmęli eins og

tuga2tvi(25, S).

og tślkurinn svarar

S = [1, 1, 0, 0, 1]

Skilgreiningin og stašreyndirnar um venslin dec2bin duga raunar til aš breyta tölu ķ lista af tölustöfum ķ tvķundakerfi en sį listi er öfugur. Vensl­in conc og snua snśa honum viš.

Hugbśnašargerš, villur og įreišanleiki

Hugbśnašur - tvöfalt stęrri, margfalt dżrari

Žegar tölvur hófu innreiš sķna ķ atvinnulķf į įrunum eftir 1960 voru vél­ar­nar dżrar og kostnašurinn viš kaup og višhald žeirra margfalt meiri en žaš sem greitt var fyrir hugbśnaš. Nś hefur žetta hlutfall fyrir löngu snśist viš og fyrirtęki sem nota tölvur greiša aš jafnaši miklu meira fyrir hugbśnaš heldur en fyrir vélabśnaš.

Fyrir žį sem ašeins hafa skrifaš smįforrit, eins og verkefni ķ byrjenda­bók ķ forritun, getur veriš erfitt aš gera sér grein fyrir žvķ hve mikil vinna liggur aš baki hugbśnaši eins og bókhaldskerfi, töflureikni eša tölvuleik. Žaš er freistandi aš hugsa sem svo aš ef žaš tekur einn mann viku aš skrifa smįforrit žį geti hann skrifaš 50 sinnum stęrra forrit į einu įri. En reynslan sżnir aš žetta er fjarri sanni. Stór hugbśn­ašar­verkefni eru yfirleitt mun dżrari og mun tķmafrekari en žeir sem ašeins hafa reynslu af smķši lķtilla forrita geta meš góšu móti gert sér grein fyrir. Fyrir žessu eru żmsar įstęšur:

Lķtil forrit eins og fjölvar eša smįforrit į vefsķšum eru yfirleitt skrifuš sem ein heild. Stórir hugbśnašarpakkar eru hins vegar samsettir śr mörg­um hlutum sem žurfa aš spila saman og žaš er tķmafrek vinna aš skil­greina višmót og samskeyti og tryggja snuršulausa samverkun.

Smįforrit žarfnast ekki skjal­bśn­ašar (ž.e. leišarvķsa, handbóka, upp­lżs­inga um višhald o.s.frv.) en meš stórum hugbśnašapökkum žarf aš fylgja verulega mikiš af gögnum og upplżsingum svo hęgt sé setja žį upp, nota žį, višhalda og endurbęta žótt höfundar žeirra séu ekki viš.

Stóra hugbśnašarpakka žarf aš vera hęgt aš keyra ķ fjölbreytilegu umhverfi (t.d. į öllum PC tölvum sem keyra Microsoft Windows hvort sem žęr nota Windows 95, 98 eša NT og hvort sem žęr eru stakar, eša hluti af stašarneti og hvort sem žęr vista gögn į eigin diski eša į diski netžjóns o.s.frv.).

Stórir hugbśnašarpakkar žurfa yfirleitt aš męta fjölbreytilegum žörfum sem er erfitt aš hafa yfirsżn yfir og skilgreina nįkvęmlega. Sį sem skrifar smįforrit veit oftast nįkvęmlega hvaš forritiš į aš gera. En žeir sem vinna stór verkefni žurfa oft og išulega aš verja miklum tķma til aš įtta sig į vinnubrögšum, žörfum og hugsunarhętti vęntanlegra not­enda.

Žetta žrennt sem tališ hefur veriš veldur žvķ aš vinna viš hverja lķnu af kóta ķ stórum hugbśnašarpakka er margfalt meiri en ķ smįforriti. Enn er žó ótališ žaš sem mestu skiptir:

Stórir hugbśnašarpakkar eru išulega samvinnuverkefni margra forrit­ara, enda tęki vinna viš žį mörg įr og jafnvel įratugi ef hśn vęri unnin af einum manni. En tveir forritarar sem vinna saman afkasta alls ekki tvöfalt meiru en einn, žvķ žótt hlutbundin forritun hafi greitt mjög yfir samvinnu forritara fer samt verulega mikill hluti af tķma žeirra ķ aš sam­stilla kraftana og koma sér saman um verkaskiptingu og tilhögun eša skilgreiningu einstakra verkžįtta. Žegar margir forritarar vinna saman getur žetta žżtt aš hver žeirra skrifi tvöfalt, fjórfalt eša įttfalt fęrri lķnur af kóta į dag en hann gerši ef hann ynni einn. Ef einn mašur yrši tvö įr aš ljśka verkefni, en žaš žarf aš ljśka žvķ į einu įri, žį getur žvķ žurft aš fjölga forriturum ķ fjóra, įtta eša jafnvel sextįn fremur en tvo.

Frį hönnun til śtgįfu

Vinnu viš gerš hugbśnašar er hęgt aš skipta ķ nokkra įfanga. Alls fyrst žarf aušvitaš aš įkveša nokkurn veginn hvaš į aš gera og safna sam­an forriturum og öšru sérfróšu fólki til aš vinna verkiš. En eftir aš hin eiginlega vinna er hafin eru helstu įfangar į leiš frį hönnun til śtgįfu žessir:

Lżsing į žvķ hvaš hugbśnašurinn į aš gera og hvernig hann į aš vera. Slķk lżsing getur veriš ansi langt mįl. Hśn žarf m.a. aš tiltaka hvaša žörfum forritiš į aš žjóna og lżsa notendaskilum žess.

Lżsing į innvišum forritsins. Hvernig skiptist žaš ķ klasa. Hvers konar gagna­grindur eru notašar og hvaša algrķm eru notuš til aš vinna einstaka verkžętti.

Verkaskipting milli einstaklinga og vinnuhópa įkvešin.

Forritunin sjįlf. Forritarar skrifa kóta į einhverju forritunarmįli. Į žessu stigi koma išulega ķ ljós vankantar į žeirri hönnunar- og skipu­lags­vinnu sem unnin var į fyrri stigum svo žaš veršur aš endurtaka hana aš einhverju leyti.

Prófun einstakra klasa og forritshluta. Leiši prófanir ķ ljós galla ķ hönnun eša forritun getur žurft ašendurtaka einhvern hluta žeirrar vinnu.

Samtenging allra hluta hugbśnašarins ķ eina heild og prófanir į sam­spili žeirra.

Samning skjalbśnašar (leišarvķsa, handbóka o. ž. u. l.)

Einhver hópur vęntanlegra notenda fenginn til aš reyna brįšabirgša­śtgįfu af hugbśnašinum. Slķk brįšabirgšaśtgįfa er oft kölluš beta-śt­gįfa.

Hugbśnašurinn lagašur ķ ljós reynslunnar af beta śtgįfunni.

Śtgįfa og markašssetning. Žegar hingaš er komiš er vinna viš gerš ann­arrar śtgįfu ef til vill hafin.

Villur

Stór hluti af vinnunni viš hugbśnašargerš snżst um prófanir, leit aš villum, lagfęringar og leišréttingar. Samt eru villur ķ flestum forritum og sumar žessar villur leyna į sér, forrit getur jafnvel veriš ķ notkun įrum saman įn žess aš žęr komi ķ ljós.

Hinn svokallaši 2000-vandi var t.d. ķ žvķ fólginn aš forrit geymdu įrtöl sem tveggja stafa tölu. Žannig var įrtališ 1998 geymt sem talan 98. Oft žurfa forrit aš finna bil milli tveggja dagsetninga (t.d. til aš reikna vexti) og hluti af žeim śtreikningum er išulega ķ žvķ fólginn aš draga eitt įrtal frį öšru. Žannig er biliš milli įranna 1991 og 1998 reiknaš sem 98-91=7 įr. En ef įrtališ 2000 er geymt sem talan 00 žį reiknast biliš milli 1998 og 2000 vera 00-98=-98 įr. Žessi villa leyndist įrum saman ķ fjölmörgum forritum og gerši fyrst vart viš sig um įramótin 1999 til 2000.

Į ensku eru villur ķ forritum stundum kallašar bugs (ž.e. skordżr) og forrit sem leitar uppi villur ķ kóta kallaš debugger. Į bak viš žetta oršalag er sś saga aš Grace Hooper (einn af höfundum forritunar­mįlsins COBOL) hafi lent ķ žvķ einhvern tķma ķ įrdaga tölvutękninnar aš vélin sem hśn vann viš hagaši sér undarlega. Grace leitaši įn įrang­urs aš villu ķ forritinu en fann enga. Žį stóš hśn upp, opnaši tölvuna (sem var į stęrš viš heilt herbergi) gekk inn ķ hana og fann hvaš var aš: Skorkvikindi hafši trošiš sér milli raflagna meš žeim afleišingum aš vélin vann ekki sem skyldi. Žetta dżr var vķst ekki lśs en į ķslensku er samt talaš um aš forrit sem innihalda mikiš af villum séu lśsug og forrit sem leita uppi villur ķ kóta kölluš kembiforrit (enda eru lśsakambar notašir til aš greiša lżs śr hįri manna).

Villum ķ forritum er hęgt aš skipta ķ tvo meginflokka: Mįlvillur og hugsunarvillur.

Žaš er mįlvilla žegar forritskótinn samrżmist ekki mįlskipun forrit­unar­mįlsins. Žżšendur eiga aš bregšast viš slķkum villum meš žvķ aš neita aš žżša forritiš en žżšendur geta innihaldiš villur rétt eins og önnur forrit svo stundum valda mįlfręšivillur žvķ aš til veršur gallašur véla­mįls­kóti. Flestum žżšendum fylgja kembiforrit sem finna mįl­fręši­villur og ašstoša forritara viš aš leišrétta žęr.

Alvarlegar villur ķ hugbśnaši koma žó oftast til af öšru en žvķ aš forritskóti samręmist ekki mįlfręšireglum. Žetta eru hugsunarvillur af żmsu tagi. Sumar valda inningarvillum (į ensku run-time error) ž.e. villum sem koma ķ ljós žegar forrit er keyrt og valda žvķ oft aš keyrslan stöšvast. Sem dęmi um villur af žessu tagi mį nefna deilingu meš nślli eša yfirflęši ķ reikningi (į ensku arithmetic overflow) sem veršur žegar śtkoma śr reikniašgerš fer śt fyrir žau mörk sem gisti eša breyta getur rśmaš. Ašrar hugsunarvillur birtast ekki meš jafnaugljósum hętti. Žęr eru rökvillur sem valda žvķ aš forrit gerir eitthvaš annaš en žvķ er ętlaš aš gera eša skilar rangri nišurstöšu. Žaš getur veriš mjög erfitt aš sann­reyna aš forrit sé laust viš rökvillur.

Rökvillur, forskilyrši og eftirskilyrši

Žaš er hęgt aš fullyrša įn fyrirvara aš forritskóti innihaldi mįlvillu eša aš inningarvilla verši viš keyrslu žess en žaš er ekki hęgt aš tala um rökvillu nema meš hlišsjón af einhverri lżsingu į hvaš forriti er ętlaš aš gera. Ef forriti er t.d. ašeins ętlaš aš mešhöndla dagsetningar frį 1.1.1900 til 31.12.1999 žį er varla hęgt aš tala um rökvillu žó žaš fari rangt meš dagsetninguna 1.1.2000. Žaš er heldur ekkert undan žvķ aš kvarta žó forrit skrifi į skjįinn 2+2=5 ef žvķ er ašeins ętlaš aš vera skjįhvķlir. Sé žvķ hins vegar ętlaš aš vera reiknivél hlżtur žetta aš teljast rökvilla.

Eitt af žeim verkum sem ekki er hęgt aš leysa meš algrķmi er aš skera śr um hvort forrit hagar sér ķ samręmi viš lżsingu į verki eša greinar­gerš fyrir žvķ hvaš žaš į aš gera. En žótt ekki sé til pottžétt ašferš til aš komast aš žessu ķ öllum tilvikum er stundum hęgt aš leiša ķ ljós, og jafnvel aš sanna meš stęršfręšilegum hętti, aš forrit eša forritshluti vinni sitt verk eins og til er ętlast.

Eitt af mikilvęgustu hjįlpartękjum sem forritarar nota til aš staš­festa réttmęti og įreišanleika forrita er nįkvęmar lżsingar į forskil­yrš­um og eftirskilyršum. Flest forrit skiptast ķ nokkra klasa og hver klasi inniheldur nokkrar ašferšir. Sé ofansękin ašferšafręši notuš er hver ašferš mynduš śr nokkrum stuttum undirforritum. Til aš stašfesta aš hvert undirforrit (eša hver forritshluti) vinni rétt žarf aš lżsa žvķ hvaš žaš į aš gera. Žetta er yfirleitt gert meš žvķ aš tiltaka forskilyrši og eftirskilyrši.

Forskilyrši segja ķ hvaša įstandi gögn mega vera og hvaša gildi breytur mega hafa įšur en tiltekinn hluti forrits er framkvęmdur.

Eftirskilyrši segja hvaša įhrif tiltekinn hluti forrits hefur į gögn og breytur, į hvern hįtt staša žeirra eftir er fall af stöšu žeirra fyrir keyrslu žessa hluta.

Til upprifjunar

Hvaš eru:

Backus-Naur rithįttur, BASIC, Bytecode, C, C++, eftirskilyrši, erfšir, fallamįl, fjölbreytni, flęširit, forskilyrši, gildingarmįl, inn­ing­ar­villa, Java, Javascript, kembiforrit, klasi, kótasmķš, kvikleg bind­ing, lįgtęknimįl, lesgreining, Lisp, Logo, lokatįkn, mįlskipan, merk­ingarfręši, notfrjįls ašferš, ofansękin hönnun, Pascal, Perl, Prolog, Scheme, smalamįl, tślkur, vélamįl, žżšandi, ęšri forrit­unar­mįl.

Nefndu dęmi um:

Fallamįl, gildingarmįl, hlutbundin mįl, lįgtęknimįl, mótuš mįl.



Žetta žżšir aš 4. regla leyfi aš ķ staš segš sé sett lišur segš

Hér er fylgt žeirri venju aš lįta klasa hafa nöfn sem byrja į stórum staf.


Document Info


Accesari: 3210
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )