24
Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Kevyttä ohjelmointikielten analyysiä TIEA255 Tietotekniikan teemaseminaari — ohjelmointikielet ja kehitysalustat Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. helmikuuta 2011

Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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

Page 2: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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?

Page 3: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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?

Page 4: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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.

Page 5: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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

Page 6: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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?

Page 7: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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

Page 8: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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.

Page 9: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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ä).

Page 10: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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.

Page 11: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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, `)

Page 12: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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ä

Page 13: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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.

Page 14: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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.

Page 15: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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

Page 16: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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.

Page 17: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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, . . .

Page 18: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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?

Page 19: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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?

Page 20: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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ä)· · ·

Page 21: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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

Page 22: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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

Page 23: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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.

Page 24: Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä Mikä se on? Minkälaisia ne ovat? Mitä ne ovat syöneet? Ohjelmointikieli? programming

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.