• Rezultati Niso Bili Najdeni

Lastnosti programskih jezikov

Kodiranje

9.1 Lastnosti programskih jezikov

Lastnosti programskih jezikov, ki imajo vpliv na proces kodiranja lahko delimo na psiholoˇske in inˇzenirske ali tehniˇcne.

9.1.1 Psiholoˇske lastnosti

Psiholoˇske lastnosti programskih jezikov vplivajo na sam proces kodiranja kot ˇcloveˇske aktivnosti.Odloˇcajo o naˇsi sposobnosti uˇcenja in uporabe pro-gramskega jezika ter vzdrˇzevanja programske kode.

Programerji naˇcrt programske opreme udejanijo s pomoˇcjo programskega jezika.Zato morajo obvladati sintakso in semantiko programskega jezika.

Semanatiˇcno znanje obsega sploˇsne koncepte, ki niso neposredno vezani na doloˇcen programski jezik.Semantiˇcno znanje obsegajo viˇsji koncepti, na primer kaj je urejanje, in niˇzji koncepti, na primer kaj je prirejanje vrednosti spremenljivki.

Sintaktiˇcno znanjeobsega pravila, kako se piˇsejo na primer zanke, prireja vrednosti spremenljivkam, kako se posega v podatkovne strukture itd. ˇCe nekaj ˇcasa ne programiramo v izbranem programskem jeziku, lahko njegova sintaktiˇcna pravila hitro pozabimo.Na osnovi poznavanja semantiˇcnih stru-ktur pa se lahko tudi hitro nauˇcimo novega programskega jezika.Nauˇciti se moramo le novih sintaktiˇcnih pravil.Uˇcenje prvega programskega jezika je zato teˇzje kot uˇcenje drugega in naslednjih.To seveda ne velja, ˇce je semantiˇcna struktura jezikov zelo razliˇcna, kot je na primer pri Pascalu in LISP-u.Sintaktiˇcno in semantiˇcno znanje nista tesno povezani. Cepravˇ vemo, kaj je kazalec, lahko hitro pozabimo, kako se oznaˇci v doloˇcenem programskem jeziku.Sintaktiˇcna pravila razliˇcnih jezikov zlahka pomeˇsamo.

Za razumevanje programiranja kot ˇcloveˇske aktivnosti je potrebno ra-zumeti osnovno strukturo ˇcloveˇskega spomina (slika 9.1). Informacije, ki jih dojemamo s pomoˇcjo ˇcutil, shranjujemo najprej v kratkoroˇcni spomin.

Kratkoroˇcni spomin ima zelo omejeno kapaciteto.Miller [41] ocenjuje, da lahko vanj shranimo le okoli sedem enot.Z zdruˇzevanjem informacij lahko manjˇse enote zdruˇzujemo v veˇcje enote (angl.chunking).Telefonska ˇstevilka

“1768 387” lahko zavzame vseh sedem mest v kratkoroˇcnem spominu. ˇCe pa jo spoznamo kot telefonsko ˇstevilko Fakultete za raˇcunalniˇstvo in in-formatiko, zavzame le eno mesto.Enote v kratkoroˇcnem spominu sluˇzijo kot neke vrste nalepke za enoto informacij, naj bo ta enota posamezna cifra, telefonska ˇstevilka ali algoritem.Ko informacije procesiramo oziroma reˇsujemo probleme, sluˇzi kratkoroˇcni spomin kot delovni spomin.Naˇse znanje, izkuˇsnje in vse, kar vemo, je shranjeno v dolgoroˇcnem spominu, ki

9.1. Lastnosti programskih jezikov 167 zaznava

kratkoroˇcni spomin

dolgoroˇcni spomin

Slika 9.1: Komponente ˇcloveˇskega spomina

ima skoraj neomejeno kapaciteto.Izkuˇseni programerji imajo svoje znanje in izkuˇsnje organizirane v veˇcje spominske enote, na primer proces iskanja, algoritem urejanja itd.Z njihovo pomoˇcjo lahko zato izkuˇseni programerji hitreje razmiˇsljajo o reˇsitvah problemov in hitreje razumejo tuj program, saj v kodi take enote kar neposredno prepoznajo, ne da bi morali pregledati vse podrobnosti [66].

Doloˇcene znaˇcilnosti programskih jezikov lahko kodiranje olajˇsajo ali pa poveˇcajo moˇznost napak.Psiholoˇske lastnosti so v veliki meri doloˇcene ˇze z definicijo samega programskega jezika.Med vaˇznejˇse psiholoˇske lastnosti programskih jezikov ˇstejemo:

Uniformnost. Stopnja konsistentne uporabe notacije je odvisna od uni-formnosti programskega jezika.Na primer, ˇce okrogle oklepaje urabljamo v aritmetiˇcnih izrazih, za omejitev ˇstevcev v vektorskih po-datkovnih strukturah in omejitev argumentov podprogramskih klicev, taka meˇsana uporaba lahko poveˇca moˇznost napak pri kodiranju.Za-radi pomanjkanja simbolov v naboru znakov ASCII so avtorji program-skih jezikov velikokrat prisiljeni, da iste znake uporabijo za razliˇcne operacije (ang.operator overloading).Znak “+” obiˇcajno pomeni seˇstevanje, lahko pa tudi unijo dveh mnoˇzic, ˇce sta argumenta mnoˇzici.

Dvoumnost. Prevajalnik vsak sintaktiˇcno pravilno zapisan izraz interpre-tira na enak naˇcin. ˇCe prevajalnik doloˇca vrstni red operacij glede na vrstni red zapisa, na primer od leve proti desni, bo izraz x =

a/b*c interpretiral kot x = (a/b) *c.Vendar lahko isti izraz nek programer razume tudi kotx = a/(b *c).Programski jeziki, ki do-voljujejo dvoumno zapisovanje aritmetiˇcnih izrazov, s tem povzroˇcajo veˇcjo moˇznost napak.

Pogost vir dvoumnosti so tudi implicitne deklaracije podatkovnega tipa spremenljivk.V Fortranu in Basicu je prva uporaba imena tudi implicitna deklaracija tega imena. ˇCe se ime zaˇcne s ˇcrkami I do N, ime pomeni celo ˇstevilo, sicer pa realno ˇstevilo. ˇCe ˇzelimo odstopati od tega pravila, moramo uporabiti eksplicitno deklaracijo podatkovnega tipa.

Kompaktnost programskega jezika je odvisna od vrste in ˇstevila sintakti-ˇcnih informacij, ki si jih moramo zapomniti.Na kompaktnost pro-gramskega jezika vpliva:

ˇstevilo in raznolikost kontrolnih in podatkovnih struktur, ki omo-goˇcajo jedrnato izraˇzanje naˇsih idej,

vrsta besed (njihova dolˇzina!) in okrajˇsave, ki jih lahko upora-bljamo,

ˇstevilo vgrajenih funkcij in operacij.

Z vidika ˇcloveˇskega spomina je bolje, ˇce lahko svoje ideje izraˇzamo na ˇcim krajˇsi naˇcin in ˇce jih lahko zdruˇzujemo v bloke.Dolge zanke in ˇstevilne razvejitve slabˇsajo razumljivost kode.

9.1.2 Tehniˇcne lastnosti

Tehniˇcne lastnosti programskih jezikov odloˇcajo predvsem o primernosti programskega jezika za doloˇceno vrsto problema.Osnovne lastnosti pro-gramskih jezikov, gledano s tehniˇcnega vidika, so:

1.teˇzavnost prevajanja naˇcrta programske opreme v kodo, 2.uˇcinkovitost prevajalnika,

3.prenosljivost kode,

4.ustrezna programska razvojna orodja, 5.zmoˇznost vzdrˇzevanja.

9.1. Lastnosti programskih jezikov 169 9.1.3Jezikovni konstrukti

Naˇsteli bomo nekaj najvaˇznejˇsih jezikovnih konstruktov in njihovih oblik, ki odloˇcajo o zgoraj omenjenih psiholoˇskih in tehniˇcnih lastnostih.

Deklaracije. Z deklaracijami doloˇcimo, katera imena lahko uporabljamo v programu, kje se deklaracija nahaja, pa tudi obmoˇcje uporabe tega imena.Nekateri programski jeziki omogoˇcajo implicitno deklaracijo imen (ko ime prviˇc uporabimo), bolje pa je, kadar se zahteva eksplicit-na deklaracija vseh imen. ˇCe deklaracija doloˇca tudi podatkovni tip imena, lahko prevajalnik kontrolira pravilno rabo imen.Tudi konverzi-ja podatkovnih tipov je lahko implicitna (na primer, pri seˇstevanju ce-lega in realnega ˇstevila se celo ˇstevilo spremeni v realno).Natanˇcnejˇsa avtomatska kontrola podatkovnih tipov je moˇzna, kadar moramo vse spremembe eksplicitno definirati.

Podatkovni tipi in strukture. Stevilni programski jeziki omogoˇˇ cajo tudi definiranje novih podatkovnih tipov in podatkovnih struktur na osnovi ˇze vgrajenih.Prevajalnik lahko kontrolira tudi te, uporabniˇsko defini-rane podatkovne tipe in strukture.Z njihovo pomoˇcjo lahko kodo veliko laˇzje prilagajamo naˇsim zahtevam.

Kazalci. Nekateri programski jeziki omogoˇcajo indirektno kontrolo objek-tov s pomoˇcjo kazalcev.Kazalci so posebej primerni za definicijo rekurzivnih in dinamiˇcnih struktur.Kadar na iste objekte kaˇze veˇc kazalcev, lahko hitro pride do napak.Uporaba kazalcev zahteva tudi dodatno skrb pri upravljanju s spominom.

Inicializacija. Do napak lahko pride, kadar uporabimo spremenljivke, ki jim prej ˇse nismo doloˇcili vrednosti.Nekateri programski jeziki omo-goˇcajo inicializacijo spremenljivk hkrati z njihovo deklaracijo, drugi zopet uporabljajo implicitni mehanizem inicializacije.

Kontrolne strukture. Osnovne kontrolne strukture za ponavljanje so zan-ke for, while in repeat.Medtem ko je normalno, da programer v telesu zankewhile ali repeat kontrolira, kdaj se bo le-ta konˇcala, je spreminjanje ˇstevca v telesu dotiˇcne zanke for recept za napake in nerazumljivost.

Osnovna kontrolna struktura za izbiranje je if then else.Nekateri programski jeziki imajo tudi moˇznost izbirati med veˇc moˇznostmi s stavkomselect case.

Veliko ˇcrnila je bilo prelitega v zvezi z uporabo oziroma prepovedjo uporabe ukazaGOTO.Raba ukazaGOTOdela kodo nepregledno in teˇzje razumljivo, vendar pa lahko v doloˇcenih izjemnih primerih naredi kodo enostavnejˇso in krajˇso.

Moduli. Veˇcina programskih jezikov omogoˇca definicijo programskih mo-dulov (funkcij, podprogramov, procedur), da bi lahko sistem razdelili v logiˇcne enote.Programski jeziki se precej razlikujejo pri sintaktiˇcnih pravilih, ki veljajo za obseg spremenljivk (lokalne/globalne, vidne/skri-te).V tistih jezikih, kjer so pravila modularnosti (visoka kohezija, nizka soodvisnost) stroˇzja, je manj moˇznosti za napake in je sintaktiˇcna kontrola pravilnosti laˇzja.

Prenos parametrov. Pri formalni definiciji procedur uporabimo formalne parametre.Ko proceduro kliˇcemo v programu, moramo uporabiti de-janske parametre.V razliˇcnih programskih jezikih obstajajo razliˇcni mehanizmi za priredbo dejanskih vrednosti k formalnim parametrom:

klic po imenu name), klic po naslovu (angl.call-by-reference), klic po vrednosti (angl.call-by-value).

Rekurzija. Nekatere algoritme se da veliko krajˇse in razumljivejˇse zapisati na rekurziven naˇcin, ˇce to programski jezik dovoljuje.Vendar se rekurzivno zapisani algoritmi izvajajo v nekaterih primerih nekoliko dalj ˇcasa zaradi veˇckratnih klicev iste procedure.

Da bi izboljˇsali psiholoˇske in tehniˇcne lastnosti programskih jezikov, je sintaksa novejˇsih programskih jezikov na sploˇsno bolj zavezujoˇca.Preva-jalniki in druga programska orodja lahko zato pomagajo odkriti v kodi veˇc napak.