Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä...
Transcript of Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä...
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Kevyttä ohjelmointikielten analyysiäTIEA255 Tietotekniikan teemaseminaari —
ohjelmointikielet ja kehitysalustat
Antti-Juhani Kaijanaho
TIETOTEKNIIKAN LAITOS
16. helmikuuta 2011
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Sisällys
Mikä se on?
Minkälaisia ne ovat?
Mitä ne ovat syöneet?
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Sisällys
Mikä se on?
Minkälaisia ne ovat?
Mitä ne ovat syöneet?
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Ohjelmointikieli?
programming language n. a system of preciselydefined symbols and rules devised for writingcomputer programs
Programming, n., in the Oxford English Dictionary. Third edition, October 2009; online version
November 2010. http://www.oed.com:80/Entry/152232; accessed 15 February 2011. An entry for
this word was first included in A Supplement to the OED III, 1982.
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Aspekteja
I syntaksi (kielioppi)I ohjelmointikieli formaalina kielenäI tunnistetaan kieleen kuuluvat ohjelmatI ks. TIEA241 Automaatit ja kieliopit
I semantiikka (merkitysoppi)I kieleen kuuluvien ohjelmien käyttäytyminenI yleensä toteutuksesta riippumaton (abstrakti?)I ks. TIES542 Ohjelmointikielten periaatteet
I pragmatiikka (käytäntö)I miten kieltä käytännössä käytetäänI ks. kielikohtaiset oppikirjat ja kurssit
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Sisällys
Mikä se on?
Minkälaisia ne ovat?
Mitä ne ovat syöneet?
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Ohjelmointikielten sukupolvet
Kyseenalainen mutta usein käytetty jaottelu!I konekielet
II symboliset konekielet (assembly)III yleiskäyttöiset (tavanomaiset)
ohjelmointikieletIV tietylle sovellusalueelle räätälöidyt
ohjelmointikielet (domain-specificlanguages, DSL)
V ongelman kuvaukseen (ei sen ratkaisuun)keskittyvät kielet
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Paradigmat
paradigm, n.1. A pattern or model, an exemplar; (also) a typical
instance of something, an example.2. . . .3. . . .4. A conceptual or methodological model underlying
the theories and practices of a science or discipline ata particular time; (hence) a generally accepted worldview.
The Oxford English Dictionary. Third edition, October 2009; online version November 2010.
http://www.oed.com:80/Entry/137329; accessed 15 February 2011. An entry for this word was
first included in New English Dictionary, 1904.
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Ohjelmointiparadigma
Ohjelmointiparadigma on nimetty kokoelmaohjelmointikäytänteitä, joiden taustalla on enemmän taivähemmän yhtenäinen näkemys siitä, mitä ohjelmoinninja ohjelien tulisi olla. Ohjelmointiparadigmat ovat yleensätoisensa poissulkevia (vaikkakin niissä voi olla yhteisiäpiirteitä).
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Ohjelmointiparadigmoja
olio-ohjelmointi (object-oriented programming) Ohjelmaon olioiden keskustelukerho.
funktio-ohjelmointi (functional programming) Ohjelmaon matemaattinen kuvaus syötteeltätulosteelle.
logiikkaohjelmolinti (logic programming) Ohjelma onlooginen pähkinä, jonka tietokone ratkaisee.
käskyohjelmointi (imperative programming) Ohjelma onkäskyjono.
toiminto-ohjelmointi (procedural programming)Ohjelma koostuu toiminnoista (procedures),jotka voivat koostua muista toiminnoista.
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Funktio-ohjelmointi
hello(_) = "Hello, World!"
sum1([]) = 0sum1(x : r) = x + sum1(r)
add(a, b) = a + b
sum2([]) = 0sum2(x : r) = add(x, sum1(r))
foldr(f , z, []) = zfoldr(f , z, (x : r)) = f (x, foldr(f , z, r))
sum3(`) = foldr(add, 0, `)
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Funktio-ohjelmoinnin piirteitä
I ohjelma rakentuu yhdistelemällä funktioitaisommiksi funktioiksi
I funktiot voivat ottaa parametrikseen ja palauttaafunktioita
I tällaiset funktiot ovat funktionaaleja (engl.higher-order functions, HOFs)
I silmukatkin ilmaistaan rekursiona taifunktionaaleina (esim. foldr
I puutietorakenteetI funktioiden määrittely paloittain yhtälöillä
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Logiikkaohjelmointi
lapsi(vappuTuomioja, erkkiTuomioja).lapsi(hellaWuolijoki, vappuTuomioja).
lapsi(taunoPalo, eskoSalminen).lapsi(eskoSalminen, kristoSalminen).lapsi(eskoSalminen, kreetaSalminen).
lapsi(rafaelPaasio, perttiPaasio).lapsi(perttiPaasio, heliPaasio).
lapsenlapsi(X, Y)⇐ lapsi(X, Z), lapsi(Z, Y).
Kiitokset muutamalle Facebook-tuttavalleni esimerkki-ihmisten ehdottamisesta.
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
lapsenlapsi(taunoPalo, X) =⇒ X = kristoSalminen;X = kreetaSalminen.
lapsenlapsi(X, heliPaasio) =⇒ X = rafaelPaasio.lapsenlapsi(X, Y) =⇒ X = hellaWuolijoki,
Y = erkkiTuomioja;X = taunoPalo,Y = kristoSalminen;X = taunoPalo,Y = kreetaSalminen;X = rafaelPaasio,Y = heliPaasio.
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Logiikkaohjelmoinnin piirteitä
I ohjelma rakentuu faktatietokannasta ja joukostapäättelysääntöjä
I päättelysäännöillä määritellään ”aliohjelmia”I ohjelma on väite, ja sen suoritus on yritys todistaa se
oikeaksiI aliohjelmassa syöte- ja tulostiedot riippuvat
käyttötavasta, ei (yleensä) määritelmästäI puutitetorakenteet
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Kieliparadigma
I Kieliparadigma on ohjelmointikielten joukko, jonkaalkioita yhdistää jonkin merkityksellinensamankaltaisuus.
I Kieliparadigmassa on yleensä paradigmaattinenkieli, jota pidetään kyseisen paradigmanesimerkillisenä edustajana.
I Usein (mutta ei aina) paradigman paradigmaattinenkieli on ollut muiden paradigmaan kuuluvienkielten esikuva.
I Kieliparadigmaan liittyy usein jokinohjelmointiparadigma.
I Jos paradigmaattinen kieli on muiden paradigmankielten esikuva, puhutaan tavallisesti kieliperheestätai -suvusta.
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Kieliparadigmoja
I Algol, Pascal, C, . . .I C, C++, Java, C#, . . .I Simula, Smalltalk, Objective-C, C++, Java, C#,
Delphi, . . .I Lisp, Scheme, Clojure, . . .I ML, SML, O’Caml, Haskell, Miranda, Clean, . . .I Lazy ML, Miranda, Clean, Haskell, . . .I Prolog, Mercury, . . .
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Sisällys
Mikä se on?
Minkälaisia ne ovat?
Mitä ne ovat syöneet?
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Syntaksi – semantiikka
I syntaksi eli kielioppi määrittelee, mitkä merkkijonotovat kielen ohjelmia
I (dynaaminen) semantiikka kertoo, mitä kielenohjelmat tekevät
I välissä on ns. staattinen semantiikka eli rajoitteet(constraints)
I Pitääkö muuttujat esitellä ennen käyttöä?I Pitääkö ohjelma todistaa tyyppiviheettömäksi ennen
suoritusta?
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Staattinen – dynaaminen
I Ohjelman ominaisuus on staattinen (elikäännösaikainen), jos se on selvitettävissä ennensuorituksen alkua.
I ohjelmatekstin kokoI muuttujan nimi· · ·
I Ohjelman ominaisuus on dynaaminen (elisuoritusaikainen), jos se riippuu ohjelmansuorituskerrasta ja sen etenemisestä
I ohjelman suorituksen kestoI muuttujan arvo (yleensä)· · ·
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Arvo – olio
I arvo on muuttumaton, ajaton, identiteetitön,reagoimaton
I oliolla onI tila, joka voi muuttuaI identiteetti, joka erottaa sen muista olioista
muutoksista huolimattaI käyttäytyminen, sillä se reagoi sille tuleviin
ärsykkeisiin
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Tyyppi, tyyppivirhe
I olion tyyppi kertoo, mihin ärsykkeisiin se osaareagoida
I arvon tyyppi kertoo, mitä arvolle voi tehdäI niiden olioiden ja arvojen joukkoa, joilla on yhteinen
tyyppi, sanotaan tuon tyypin ekstensioksiI tyyppivirhe on ohjelman suorituksen aikana
esiintyvä tilanne, jossa oliolle annetaan sellainenärsyke, johon se ei osaa reagoida, tai jossa arvolletehdään jotain sellaista, jota sille ei voi tehdä
I tyyppivirhe aiheuttaa ohjelman sekoamisen
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Tyypitys
I Kieli onI vahvasti tyypitetty, jos se estää kaikki tyyppivirheetI heikosti tyypitetty, jos se estää vain osan
tyyppivirheistäI tyypitön jos se ei estä mitään tyyppivirhettä
I Usein myös vertaillaan kahden heikosti tyypitetynkielen vahvuutta.
I Vahva tai heikko tyypitys voi ollaI staattinen, jos se estää kaikki tyyppivirheet ennen
suorituksen alkuaI dynaaminen, jos se estää tyyppivirheen silloin kun se
tulee suorituksen aikana käsille
I Kieli voi olla yhtä aikaa staattisesti ja dynaamisestityypitetty.
Kevyttäohjelmointikielten
analyysiä
Mikä se on?
Minkälaisia neovat?
Mitä ne ovatsyöneet?
Poikkeavia näkemyksiä
I Jotkut tarkoittavat vahvalla tyypityksellä staattistatyypitystä.
I Jotkut tarkoittavat tyypittömyydellä dynaamistatyypitystä.
I Jotkut tarkoittavat staattisella tyypityksellä, ettämuuttujan tyyppi on staattinen ominaisuus.